猿问

前台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>)

慕神8447489
浏览 1125回答 5
5回答

开满天机

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

猛跑小猪

创建一个Beanpublic class Bean { private String content; private List<Tag> param; }public String add( @RequestBody Bean bean)就可以了也可以使用@RequestBody Map<String,Object> map。。。

手掌心

两种方案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序列化工具。
随时随地看视频慕课网APP

相关分类

Java
我要回答