1、@RequestBody注解概述

定义与作用:@RequestBody注解用于将HTTP请求体中的数据绑定到方法参数上,常用于处理JSON或XML格式的数据。
应用场景:适用于处理非默认的application/xwwwformurlencoded,如application/json或application/xml。
2、配置HttpMessageConverter
必要性:为了让SpringMVC能够正确处理@RequestBody注解的请求体数据,需要配置合适的HttpMessageConverter。
配置示例:在Spring配置文件中添加MappingJackson2HttpMessageConverter,支持JSON格式的转换。
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF8</value>
<value>application/json;charset=UTF8</value>
</list>
</property>
</bean>
3、服务接口示例
基本用法:通过@RequestBody注解,可以将请求体中的JSON字符串绑定到相应的Java对象上。

@RestController
public class ReqBodyController {
@Data
public static class Req {
private String key;
private Integer size;
}
@RequestMapping(value = "/body", method = RequestMethod.POST)
public BaseRsp body(@RequestBody Req req) {
return new BaseRsp<>(req);
}
}
4、前端调用示例
Ajax请求:使用$.ajax方法发送POST请求,指定contenttype为application/json,并传递JSON格式的数据。
$.ajax({
url: "/login",
type: "POST",
data: JSON.stringify({userName: "admin", pwd: "admin123"}),
contentType: "application/json; charset=utf8",
success: function(data) {
alert("request success !");
}
});
控制器方法:在控制器中使用@RequestBody注解接收JSON数据并绑定到Java对象。
@RequestMapping("/login")
public void login(@RequestBody String userName, @RequestBody String pwd) {
System.out.println(userName + ":" + pwd);
}
5、注意事项
ContentType设置:必须显式指定请求头的ContentType为application/json,否则会导致解析错误。
请求方法限制:@RequestBody不支持GET方法,通常用于POST、PUT等带有请求体的HTTP方法。
数据格式要求:请求体中的数据必须是有效的JSON格式,且键名必须与Java对象的属性名一致。

相关问题与解答
问题1:如何在SpringMVC中使用@RequestBody注解接收单个String类型的参数?
答:可以通过重写MappingJackson2HttpMessageConverter类来处理单个String类型的参数,具体实现如下:
package com.test.converter.json;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.LinkedHashMap;
public class CustomerMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
@Override
protected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
Class<?> deseriClazz = getClazz(clazz);
Object param = super.readInternal(deseriClazz, inputMessage);
return getTrueObject(clazz, param);
}
}
然后在Spring配置文件中注册这个自定义的转换器:
<bean id="customMappingJacksonHttpMessageConverter" class="com.test.converter.json.CustomerMappingJackson2HttpMessageConverter"/>
问题2:为什么在使用@RequestBody注解时需要显式指定ContentType为application/json?
答:因为@RequestBody注解默认处理的是application/json或application/xml等非默认的MIME类型,而浏览器默认使用的是application/xwwwformurlencoded编码方式,如果不显式指定ContentType为application/json,SpringMVC无法正确解析请求体中的JSON数据,从而导致解析错误。
各位小伙伴们,我刚刚为大家分享了有关“springmvc @RequestBody String类型参数的使用”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!













