为了账号安全,请及时绑定邮箱和手机立即绑定

前台json数据已什么格式传给后台,后台controller可以已两个参数接收,比如一个list,一个string

前台json数据已什么格式传给后台,后台controller可以已两个参数接收,比如一个list,一个string

慕神8447489 2019-02-16 18:26:20
前台代码$.ajax({ type:"post", url: 'add', contentType:"application/json; charset=utf-8", dataType:"json", data:JSON.stringify({ content:"nihaoahaha", param:[{id:1,name:"hello"},{id:2,name:"hello"}] }), success:function(data){ console.log(data); } }) 后台代码:@ResponseBody @RequestMapping(value = "add", consumes = "application/json; charset=utf-8") public String add(@RequestBody String content, @RequestBody List<Tag> param) { System.out.println("param:" + param); return "成功"; } 报错信息: 2018-01-29 17:04:55.765 WARN 10768 --- [nio-8088-exec-4] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public java.lang.String com.example.demo.controller.HelloController.add(java.lang.String,java.util.List<com.example.demo.entity.Tag>) 2018-01-29 17:04:55.765 WARN 10768 --- [nio-8088-exec-4] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved exception caused by Handler execution: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public java.lang.String com.example.demo.controller.HelloController.add(java.lang.String,java.util.List<com.example.demo.entity.Tag>)
查看完整描述

5 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

根据目前所知的答案,是没有办法的,只能使用封装类,或字符串自己解析

查看完整回答
反对 回复 2019-03-01
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

创建一个Bean
public class Bean {

private String content;
private List<Tag> param;

}
public String add( @RequestBody Bean bean)就可以了
也可以使用@RequestBody Map<String,Object> map。。。

查看完整回答
反对 回复 2019-03-01
?
手掌心

TA贡献1942条经验 获得超3个赞

两种方案
1.Content-Type以application/x-www-form-urlencoded的方式进行传输,此种传输方式是构造form表单的普通post请求的方式进行传输
这种方式的话,你的controller中需要有两个参数,同时这个两个参数不能加@RequestBody或者是加@RequestParam,参数会以字符串和数组的形式填充到参数里面
2.Content-Type以applocation/json的方式进行传输,此种方式需要传输一个json格式的字符串,controller中需要以一个字符串来进行接受这个json字符串,如果用注解的话需要添加@RequestBody,如果不用注解,需要从request域里面把body内容读取出来,然后将此字符串进行json反序列化成对象,如果想让他自动转化成对象,需要在springmvc的配置里面配置json序列化工具。

查看完整回答
反对 回复 2019-03-01
  • 5 回答
  • 0 关注
  • 1123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信