问题原因
前端准备发送一组json对象,然后我想在后端分别接成2个参数,直接上手通过**@RequestBody**获取参数,直接解析成两个参数,试了一下好像不行
错误的代码示范
这里我想使用两个参数接收json数据,发现不能
@PostMapping("/getFileListByUserId")
public String getFileListByUserId(@RequestBody UserDto userDto,@RequestBody String userObj) throws Exception {
System.out.println(userDto);
// System.out.println(userId);
// System.out.println(userName);
return "userId:"+ "asdasd";
}
解决方案
这里参口了别人的资料http://www.javashuo.com/article/p-acldahwq-co.html
根据别人资料发现的问题原因:@RequestBody只能读取一次body信息
- 这里我没有研究过RequestBody源码
- 不过在用gateway网关做过滤器的时候,,研究了好久spring中的HttpServletRequest对象,他确实只能取出一次body信息,还涉及到了响应式那套,flux、mono什么的,看的头大
- 在过滤器中取body信息,确实只能取一次,然后就无法读取了,这个过滤器
本来想偷懒直接使用注解分成两个参数,还是老老实实些map接收自己转换数据吧
@PostMapping("/getFileListByUserId")
public String getFileListByUserId(@RequestBody Map<String,Object> map) throws Exception {
System.out.println(map);
return "userId:"+ "asdasd";
}