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

前台代码
$.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>)

阅读 7.9k
5 个回答

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

两种方案
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序列化工具。

创建一个Bean
public class Bean {

private String content;
private List<Tag> param;

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

1.上传的是一个json格式的数据啊.你的自己解析json.

2.String参数前面不用加@RequestBody

String前面不需要加requestBody 只需要在需要包装的pojo对象前加requestBody注解即可.
public String add( String content, @RequestBody List<Tag> param)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题