一:背景
自己有两个项目,一个项目中使用@RequestBody
注解是有效的,而另一个项目中无效,一直报异常:
2021-04-07 18:56:48.483 WARN 11484 --- [io-8288-exec-10] .[org.springframework.web.HttpMediaTypeNotSupportedException:
Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]
网上找到的解决办法大都是说依赖未添加正确,还有其他一些办法都没有有效的解决问题。无果之后自己从源码入手,找到了出问题的原因。
二:如何使用@RequestBody注解
1.前端传递参数时需设置数据类型为applicaition/json
格式,如果使用的是axios
,代码如下所示
axios({
method: 'post',
headers: {
'Content-Type': 'application/json'
},
url: 'http://localhost:8288/test',
data: {
name: 'zhangsan',age:10},
}).then(res => {
});
2.后端使用@RequestBody
注解接收,代码如下所示:
@RequestMapping("/test")
public String test(@RequestBody User user){
return "success";
}
3.springboot
默认添加了jackson
依赖,不需要我们进行额外的引入,网上很多解决办法说需要引入该依赖。。
三: @RequestBody注解无效、后台报异常的原因
项目中出现@RequestBody
注解无效的情况后,首先检查了前端是否设置了正确的'Content-Type': 'application/json'
,然后检查了后端是否使用正确的方式接收。经确定,两者都是正确的。经过百度问题无法解决后,从源码入手找到了问题的原因:自己配置文件中的一段代码覆盖了springboot
默认加载的配置。如下图代码所示:
public class MyWebConfig extends WebMvcConfigurationSupport {
@Bean
public HttpMessageConverter responseBodyConver