使用POST请求以json格式传递参数服务端无法获取?

如标题, 使用GET请求传递参数可以获取到,但使用POST请求以json格式传递后台却无法获取,如图:TIM截图20170821163616.png

name的值是前端传递的accountName

TIM截图20170821163956.png


然而获取到的参数值却是null,如图:

TIM截图20170821163811.png


这是为什么呢?求解惑!@JFinal

评论区

JFinal

2017-08-21 16:55

先看一下控制台输出的 jfinal action report 中的 parameter 一栏,如果是这栏中的参数,则使用 getPara(...) 系的方法去读取

否则可以使用下面的方法去读:
String jsonString = HttpKit.readData(getRequest());

arboret

2017-08-21 17:01

@JFinal 不好意思我刚刚弄错了,真实情况是参数根本没有传递过去,request里没有任何参数

arboret

2017-08-21 17:15

@JFinal 谢谢,现在可以获取到了,不过有个问题是传递json格式参数的请求是不是就无法使用validator进行验证了呢?

JFinal

2017-08-21 17:18

@arboret 必然可以使用 validator

arboret

2017-08-21 17:21

@JFinal 要如何做呢?可以给些思路吗

JFinal

2017-08-21 17:22

@arboret 直接用就好

arboret

2017-08-21 17:26

@JFinal 可是validator中不是用的request.getParamter()的方式进行参数获取的吗, 刚刚就是用这样的方式获取不到, 用HttpKit才获取到的。

JFinal

2017-08-21 17:43

@arboret 这种情况确实就没办法用 Validator了,可以仿照 Validator 自己写一个 JsonValidator 出来,对请求过来的 json 数据,先用下面的代码转成对象:
1:String json = HttpKit.readData(controller.getRquest());
2:Kv para = FastJson.getJson().parse(json, Kv.class);
3:对 para 对象中的数据进行验证,然后仿照 Validator 中的验证方法返回数据

arboret

2017-08-21 17:58

@JFinal 好的,谢谢~

arboret

2017-08-22 10:01

@JFinal 你好,请问 HttpKit.readData(controller.getRquest());这个方法在使用一次过后就会把request中的数据清空吗?为什么我在validator中使用过后再在controller中使用这个方法就取不到数据了呢?

JFinal

2017-08-22 10:22

@arboret 这个是 java web 规范 servlet 中的 HttpServletRequest 的行为,jfinal 并未干预过,仅仅只是从中读取数据而已

arboret

2017-08-22 10:27

@JFinal 请问有什么解决办法吗?这样的话数据在validator中被读过一次后就没有了

JFinal

2017-08-22 10:35

@arboret 不是没有了,而是这样读的数据,你本身就无法通过 getPara 来获取,无论前面你有没有用这种方法读取过, validator 中始终就是样,getPara 还是无法工作

简单一句话: 这种传递数据的方式并非“表单提交”

JFinal

2017-08-22 10:37

@arboret 对于这种数据,不要总想着用 Validator 去验证,Validator 也仅仅是一个拦截器而已,你可以写个简单拦截器,然后验证得以的 json 数据,一点也不耽误

你必须在传 jsonString 与表单提交之间做出一个选择,选前者就无法用 getPara

arboret

2017-08-22 10:42

@JFinal 唉,好吧。谢谢~

热门反馈

扫码入社