关于JFinal中对应Content-Type为application/json,text/json的ajax请求参数处理

ajax传json或在后端经过HttpPost提交请求时,设置的Content-Type:application/json或者text/json时,request.getParameter()并不能取到对应的参数,就会致使JFinal的Controller中getPara()方法也没法取到对应的参数。我对对Final稍加改动可轻松应对json请求参数。ajax

图片.png

        (这是个人请求头)        

图片.png

(这是请求参数)

以上截图来自firebug 证实前台 js 准确无误,可是后台却接收不到requst的parameterspring

图片.pngjson

调查缘由发现原来是request无法获取到请求参数,那么对应的getpara方法天然也就没法获取到对应的请求参数;查阅资料发现springMvc中又经过注解解决这一现象。(想了解本身去百度)可是jfinal开发中忽然遇到这个问题,非常棘手,前台代码来自于bootstrap-table框架,不方便修改content-type,因此只能分析后台,经过对http请求的分析,若是,咱们锁定了request的content-type,不管什么请求的参数均可以暴力读取。因此在jfinal源码中的HttpKit中找到了以下方法。bootstrap

图片.png后端

这个时候问题也就迎刃而解了。app

下面对于该问题解决提出4种策略。框架

直接读取方法测试

咱们在controller中已知某个请求的参数会是以上类型并且无其余杂项的时候,直接 读取code

图片.png继承

图片.png

咱们经过输出发现json被读取了出来。

经过配置Handler来对这种类型数据预处理

图片.png

经过Handler预处理这种json数据而后在controller中经过获取Attr的方式获取对应的数据

图片.png

经过配置Interceptor预处理

图片.png

其余跟上一方法同样。

写BaseController,当一个项目中大量使用这种交互的时候,又不是全部成员都对这个问题很了解的时候,建议这样用

图片.png

添加这样的抽象类。让全部Controller继承BaseController而且在Controller中重载getPara系列方法,只要判断一下是否是以上类型的content-type,这样全部成员操做变量习惯不改变,问题也获得解决

图片.png

图片.png

同样输出正确结果。

关于这个问题,有想深刻探究能够自行了解HTTP协议,content-type等相关知识,博主但愿你们之后能绕过这个坑,不要像我整了一个下午,才弄明白,因此给你们分享点知识,关于这个状况没有遇到的也能够本身编写ajax请求去测试。谢谢你们观看,但愿有帮到你们哦!

相关文章
相关标签/搜索