在Spring MVC中接收JSON对象可以通过多种方式实现,以下是详细的步骤和小标题格式的说明:
以@RequestParam接收
适用场景
前端传来的是少量json数据时,例如单个键值对。
示例代码
@Autowired private AccomodationService accomodationService; @RequestMapping(value = "/update") @ResponseBody public String updateAttr(@RequestParam("id") int id) { int res = accomodationService.deleteData(id); return "success"; }
以实体类方式接收
适用场景
前端传来的是一个json对象时,“id”:1, “name”:“John Doe”}。
示例代码
@Autowired private AccomodationService accomodationService; @RequestMapping(value = "/add") @ResponseBody public String addObj(@RequestBody Accomodation accomodation) { this.accomodationService.insert(accomodation); return "success"; }
以Map接收
适用场景
前端传来的是一个json对象时,“id”:1, “name”:“John Doe”}。
示例代码
@Autowired private AccomodationService accomodationService; @RequestMapping(value = "/update") @ResponseBody public String updateAttr(@RequestBody Map<String, String> map) { if (map.containsKey("id")) { Integer id = Integer.parseInt(map.get("id")); } if (map.containsKey("name")) { String objname = map.get("name").toString(); } // 操作 ... return "success"; }
以List接收
适用场景
当前端传来一个json数组时,{“id”:1, “name”:“John Doe”}, {“id”:2, “name”:“Jane Doe”}]。
示例代码
@Autowired private AccomodationService accomodationService; @RequestMapping(value = "/update") @ResponseBody public String updateAttr(@RequestBody List<Accomodation> list) { for (Accomodation accomodation : list) { System.out.println(accomodation.toString()); } return "success"; }
使用@RequestBody注解
解释与注意事项
@RequestBody注解用于将HTTP请求体中的JSON数据绑定到方法参数上,它适用于接收复杂的JSON对象或数组。
在使用@RequestBody时,需要确保前端发送的数据类型为application/json,并且需要在ajax请求中设置相应的headers。
Ajax请求示例
发送JSON对象
var jsonObject = {"username": "admin", "password": 123}; $.ajax({ url: "/jsontest", type: "POST", contentType: "application/json", data: JSON.stringify(jsonObject), success: function(data) { alert('success'); } });
发送JSON数组
var testList = []; var user = {}; user.id = 1; user.name = 'jack'; testList.push(user); var user2 = {}; user2.id = 2; user2.name = 'tom'; testList.push(user2); $.ajax({ headers: { 'Accept': 'application/json', 'ContentType': 'application/json' }, type: 'POST', dataType: "json", //表示返回值类型,不必须 data: JSON.stringify(testList), url: '/test/postList', success: function() { alert('success'); } });
SpringMVC配置与依赖
Maven依赖
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jacksoncore</artifactId> <version>2.11.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jacksondatabind</artifactId> <version>2.11.4</version> </dependency>
SpringMVC配置
<mvc:annotationdriven/>
相关问题与解答栏目
问题1:为什么使用@RequestBody时需要设置ContentType为application/json?
答:@RequestBody注解用于处理ContentType不是application/xwwwformurlencoded的内容,如application/json和application/xml等,如果不设置ContentType为application/json,Spring MVC会无法正确解析传入的JSON数据,从而导致415错误(Unsupported Media Type)。
问题2:如何在Spring MVC中接收JSON数组?
答:要在Spring MVC中接收JSON数组,可以使用@RequestBody注解并将方法参数定义为List<E>类型,其中E是数组元素的类型,前端需要将JSON数组转换为字符串并设置ContentType为application/json,后端控制器方法会自动将JSON数组转换为Java的List对象。
各位小伙伴们,我刚刚为大家分享了有关“Spring mvc 接收json对象”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!