SpringMVC @RequestBody processing Ajax requests

来源:互联网 发布:armin van buuren知乎 编辑:程序博客网 时间:2024/06/08 19:59

1 problem description

Recently in the debugging code and found the following problems:

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unexpected character ('c' (code 99)): expected a valid value (number, String, array, object, 'true', 'false' or 'null'). 

The front is a Ajax request, the data is a JSON object.

Background found the wrong is generally JSON data format transfer problems.

The object passed to the Java terminal 2

In the SpringMVC environment, @RequestBody receiver is a Json string object, not a Json object. However, in the Ajax request often pass are Json objects, and later found withJSON.stringify(data)The way can the object into a string. At the same time the Ajax request to the specifieddataType: "json",contentType:"application/json"This can easily be an object to the Java end, use @RequestBody to bind objects

3 how will the List object to the Java terminal:

<script type="text/javascript">      $(document).ready(function(){          var saveDataAry=[];          var data1={"userName":"test","address":"gz"};          var data2={"userName":"ququ","address":"gr"};          saveDataAry.push(data1);          saveDataAry.push(data2);                 $.ajax({             type:"POST",             url:"user/saveUser",             dataType:"json",                  contentType:"application/json",                           data:JSON.stringify(saveData),             success:function(data){                                                    }          });     });  </script> 


JSON.stringify() : Convert the object to a JSON string.

JSON.parse(): The string JSON is converted to JSON objects.


Java:

@RequestMapping(value = "saveUser", method = {RequestMethod.POST }})     @ResponseBody      public void saveUser(@RequestBody List<User> users) {          userService.batchSave(users);     } 

This is not possible. Because spring MVC does not automatically translate into a List object. To the background, List is of type LinkedHashMap.

But using the array can receive User[], as follows:

@RequestMapping(value = "saveUser", method = {RequestMethod.POST }})     @ResponseBody      public void saveUser(@RequestBody User[] users) {          userService.batchSave(users);     } 
0 0