JFinal

登录 注册

关于Jfinal接收post请求body里面的json数据问题

做一个手机端的服务器,大量用到post请求的传送json数据,看手册时发现,Jfinal接收连接在url后面的参数和表单域的参数很简单,但是如何接收post请求体(Content Body)里面的json数据?只能自己获取底层servlet读取吗?

评论

  • 06-29 18:20
    使用jfinal 提供的 HttpKit.readData(getRequest()) 即可获取到
  • 07-04 18:31
    如果是手机端服务器的话,是不适合通过传参来传递的,而是应该通过发送数据流来实现,相应的服务器通过读取request中的数据流来接收。通过参数传递的话,你的思路就错了。
  • 11-22 23:26
    private boolean isReadData = false;
    private String readData = "";
    @Override
    public String getPara() {
    if ("application/json".equals(getRequest().getContentType())
    || "text/json".equals(getRequest().getContentType())) {
    if(!isReadData){
    readData = HttpKit.readData(getRequest());
    isReadData = true;
    }
    return readData;
    }
    return super.getPara();
    }

    @Override
    public String getPara(String name) {
    if ("application/json".equals(getRequest().getContentType())
    || "text/json".equals(getRequest().getContentType())) {
    return JSONObject.parseObject(getPara()).getString(name);
    }
    return super.getPara(name);
    }
  • 03-22 20:18
    @jianggr 是不是自己定义一个类并继承于Controller?
  • 03-22 20:29
    @jianggr 这样做对于复杂的json不太适合,而且每次getPara(*)都要进行判断,感觉效率有点低吧。
  • 04-05 18:57
    @rirai 这个就是继成的类处理的 我也不太知道更合适的方式 还请大牛赐教
  • 04-08 08:54
    @jianggr 不好意思,我是小白而已。我最后的解决方案和你也差不多,就是继承这个类,然后再写一个Intercept拦截,用@Before放在controller的前面,确保在getPara之前,先把数据读取到自己的map里面。仅此而已。
  • 06-23 16:37
    @JFinal 赞, 牛逼
  • 10-22 19:33
    @JFinal 会出现ios系统的手机发送post请求,后台接收不到吗
  • 10-22 19:45
    @排骨逗逗 不会出现,除非你 ios 同时上传了文件,但这种情况被证实为 ios 这端发送的格式不对

    因为 jfinal 在服务端是遵守的 http 协议,所以只要你客户端也遵守就不会有问题
  • 10-22 19:55
    @JFinal 我这边出现了一个奇怪的问题,我用ios系统的浏览器发了一个post请求,走不到后台断点,换了电脑浏览器发送却可以,请问以前有过这种情况吗
  • 10-22 20:41
    @排骨逗逗 jfinal 处在后端,只能管到后端,这种情况肯定是客户端的问题
  • 11-04 18:49
    赞 我也遇到了这个问题 body里面是不是就不用管带参什么的了吧,像getpara一样还要加参数名?
  • 发送