springmvc接收json数据的4种方式

本文介绍如何在SpringMVC中使用四种不同方法接收前端传递的数据:通过@RequestParam接收简单的键值对;利用实体类自动绑定复杂的JSON对象;采用Map灵活处理JSON数据;以及运用List接收和处理JSON数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、以RequestParam接收

前端传来的是json数据不多时:[id:id],可以直接用@RequestParam来获取值

@Autowired
private AccomodationService accomodationService;

@RequestMapping(value = "/update")
@ResponseBody
public String updateAttr(@RequestParam ("id") int id) {
    int res=accomodationService.deleteData(id);
    return "success";
}

2、以实体类方式接收

前端传来的是一个json对象时:{【id,name】},可以用实体类直接进行自动绑定

@Autowired
private AccomodationService accomodationService;

@RequestMapping(value = "/add")
@ResponseBody
public String addObj(@RequestBody Accomodation accomodation) {
    this.accomodationService.insert(accomodation);
    return "success";
}

3、以Map接收

前端传来的是一个json对象时:{【id,name】} 可以用Map获取

@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";
}

4、以List接收
当前端传来这样一个json数组:[{id,name},{id,name},{id,name},…]时,用List接收

@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";
}

补充4
SpringMVC接收List型参数
1、controller

@RequestMapping("/postList")
@ResponseBody
public String postList(@RequestBody List<TestL> testL){
    System.out.println(testL);
    return null;

}

注意:参数前面必须有注解 @RequestBody

2、ajax请求

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必须添加,否则会报415错误
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    },
  type: 'POST',
  dataType: "json", //表示返回值类型,不必须
  data: JSON.stringify(testList),
  url: '/test/postList',
  success: function(){
      alert('success');
  }
  
});

注意点:
1、参数是数组类型

2、传入data时,转换 JSON.stringify(testList)

3、必须有

headers: {
  'Accept': 'application/json',
  'Content-Type': 'application/json'
        }

最后再看下TestL类,没有特别之处(不用包装)。

public class TestL {
    private Integer id;
    private String name;
    
    public Integer getId() {
        return id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
}
<think>嗯,用户问的是Spring MVC接收JSON数据的类在哪里。首先,我需要回想一下Spring MVC处理请求的流程。当客户端发送一个JSON请求时,通常会在Controller的方法参数中使用@RequestBody注解,这样就能把请求体中的JSON数据转换成Java对象。 那背后的机制是什么呢?应该是Spring使用了一些消息转换器(MessageConverter)来处理不同的内容类型。对于JSON格式,最常用的应该是MappingJackson2HttpMessageConverter,这个类属于Jackson库的一部分,而Spring集成了它。 所以,用户可能想知道的是,处理JSON反序列化的具体类是哪个。这时候需要确认一下,当使用@RequestBody时,Spring会自动查找合适的消息转换器,而JSON的处理通常由Jackson的MappingJackson2HttpMessageConverter负责。这个类位于com.fasterxml.jackson.databind包下,或者更准确地说,在org.springframework.http.converter.json包中,因为Spring对其进行了封装。 不过要注意,用户可能需要配置相关的依赖,比如添加Jackson的库到项目中,Spring才能自动启用这个转换器。否则,即使有@RequestBody,也无法正确解析JSON数据。 另外,用户的问题可能隐含了如何正确使用这个类,或者遇到了无法接收JSON数据的问题,这时候可能需要检查依赖是否添加正确,或者是否在Spring配置中启用了注解驱动,比如使用<mvc:annotation-driven>或者@EnableWebMvc。 总结一下,处理JSON数据的核心类是MappingJackson2HttpMessageConverter,属于Jackson库,由Spring集成。用户需要添加Jackson依赖,并确保Spring配置正确,才能自动使用这个类来接收JSON数据。</think>在Spring MVC中,接收JSON数据通常通过以下核心类和注解实现: --- ### 1. **`@RequestBody` 注解** - **作用**:标注在Controller方法的参数上,用于将HTTP请求的JSON数据**自动反序列化**为Java对象。 - **位置**:`org.springframework.web.bind.annotation.RequestBody` - **示例**: ```java @PostMapping("/example") public ResponseEntity<?> handleJson(@RequestBody User user) { // 直接使用 user 对象 return ResponseEntity.ok(user); } ``` --- ### 2. **消息转换器(MessageConverter)** - **核心类**:`MappingJackson2HttpMessageConverter` - **位置**:`org.springframework.http.converter.json.MappingJackson2HttpMessageConverter` - **作用**:负责将HTTP请求中的JSON数据转换为Java对象(依赖Jackson库实现)。 - **配置**:Spring Boot默认自动配置了该转换器,无需手动添加。 --- ### 3. **依赖要求** - 需要添加JSON处理库(如Jackson)的依赖: ```xml <!-- Maven 依赖 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> ``` --- ### 4. **完整流程** 1. 客户端发送JSON数据(`Content-Type: application/json`)。 2. Spring MVC通过`DispatcherServlet`找到对应的Controller方法。 3. `@RequestBody`触发`MappingJackson2HttpMessageConverter`,将JSON反序列化为Java对象。 --- ### 5. **常见问题** - **无法解析JSON**:检查是否缺少Jackson依赖,或JSON字段与Java对象属性是否匹配。 - **日期格式处理**:可通过`@JsonFormat`注解自定义序列化格式。 --- 总结:主要依赖 **`@RequestBody` 注解** + **Jackson库**的 `MappingJackson2HttpMessageConverter` 类实现JSON数据接收
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值