ajax中设置contentType: \"application/json\",后端参数如何接收
javaScript部分
这里contentType: "application/json还未设置
1.
function testRequestBody() { var book = new Object(); var id = 1; var name = "Spring MVC企业应用实践"; book.id = 1; book.name = "Spring MVC企业应用实践"; $.ajax({ url:"${pageContext.request.contextPath}/json/testRequestBody", type:"post", dataType:"json", async:true, data: { "id":id,"name":name}, success:function (data) { console.log(data); }, error:function () { alert("数据发送失败"); } }); }
Controller代码
@RequestMapping(value = "/testRequestBody",method = RequestMethod.POST) public @ResponseBody Object testRequestBody(String id, String name){ logger.info("接收到的ajax数据:"+id+" "+name); List<Book> bookList = new ArrayList<Book>(); bookList.add(new Book(1,"语文","lzy")); bookList.add(new Book(2,"数学","liziy")); return bookList; }
控制台打印的日志信息 testRequestBody5 接收到的ajax数据:1 Spring MVC企业应用实践
数据接受正常
2.
前端数据 data: { "id":id,"color":name},
如果后端参数使用的@RequestParam标注 那么前端一定要有与之对应的 如果没有Ajax 400
@RequestMapping(value = "/testRequestBody4",method = RequestMethod.POST) public @ResponseBody Object testRequestBody( @RequestParam("id") String id, @RequestParam("name")String name){ logger.info("接收到的ajax数据:"+id+" "+name); List<Book> bookList = new ArrayList<Book>(); bookList.add(new Book(1,"语文","lzy")); bookList.add(new Book(2,"数学","liziy")); return bookList; }
控制台打印的日志信息 org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.logException Handler execution resulted in exception: Required String parameter ‘name‘ is not present
设置contentType: "application/json data数据需要加入JSON.stringify()
data : JSON.stringify(book), data : JSON.stringify({ "id":1,"name":"hhhh"}),
这两种都可以 只要属性名称对应 后端就可以接受
$.ajax({ url:"${pageContext.request.contextPath}/json/testRequestBody", type:"post", dataType:"json", contentType: "application/json", async:true, //data : JSON.stringify(book), data : JSON.stringify({ "id":1,"name":"hhhh"}), success:function (data) { console.log(data); }, error:function () { alert("数据发送失败"); } });
后端代码 需要用一个对象来接受参数
@RequestMapping(value = "/testRequestBody4",method = RequestMethod.POST) public @ResponseBody Object testRequestBody(@RequestBody Book book){ logger.info("接收到的ajax数据:"+book); List<Book> bookList = new ArrayList<Book>(); bookList.add(new Book(1,"语文","lzy")); bookList.add(new Book(2,"数学","liziy")); return bookList; }
控制台打印的日志信息 testRequestBody 接收到的ajax数据:{"id":1,"name":"hhhh","author":null}