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

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

图片.png

        (这是我的请求头)        

图片.png

(这是请求参数)

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

图片.png

调查原因发现原来是request没法获取到请求参数,那么对应的getpara方法自然也就无法获取到对应的请求参数;查阅资料发现springMvc中又通过注解解决这一现象。(想了解自己去百度)但是jfinal开发中突然遇到这个问题,很是棘手,前台代码来自于bootstrap-table框架,不方便修改content-type,所以只能分析后台,通过对http请求的分析,如果,我们锁定了request的content-type,无论什么请求的参数都可以暴力读取。所以在jfinal源码中的HttpKit中找到了如下方法。

图片.png

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

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

直接读取方法

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

图片.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请求去测试。谢谢大家观看,希望有帮到大家哦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值