前台代码$.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贡献1858条经验 获得超8个赞
创建一个Bean
public class Bean {
private String content;
private List<Tag> param;
}
public String add( @RequestBody Bean bean)就可以了
也可以使用@RequestBody Map<String,Object> map。。。
手掌心
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序列化工具。
添加回答
举报
0/150
提交
取消