今天做毕设的时候发现,在前端向后台发送一个json对象(字符串),后端用@RequestBody匹配接受的时候就会出现415 错误。
前端ajax请求:
$.ajax({
type:"post",
url:"/user/register",
dateType: "json",
contentType : 'application/json;charset=utf-8',
data : JSON.stringify(regData),
success: function (resp) {
alert(resp);
}
});
后台java代码:
@ResponseBody
@PostMapping("/register")
public String register(@RequestBody RegisterUser registerUser){
System.out.println(registerUser);
return "注册成功";
}
查了很多博客资料,最后发现问题是出现在json字符串解析转换为java对象上。
我的项目用的是 【 fastjson 】
解决办法:修改spring-mvc.xml配置文件:
<!-- 开启SpringMVC注解的支持 -->
<mvc:annotation-driven>
<!-- 解决 json 乱码 -->
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json</value>
<value>application/xml;charset=UTF-8</value>
</list>
</property>
<property name="features">
<list>
<!-- 默认的意思就是不配置这个属性,配置了就不是默认了 -->
<!-- 是否输出值为null的字段 ,默认是false-->
<value>WriteMapNullValue</value>
<value>WriteNullNumberAsZero</value>
<value>WriteNullListAsEmpty</value>
<value>WriteNullStringAsEmpty</value>
<value>WriteNullBooleanAsFalse</value>
<value>WriteDateUseDateFormat</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
参考:
https://www.cnblogs.com/boywwj/p/7441642.html
https://blog.csdn.net/qq_34500957/article/details/80523200
https://blog.51cto.com/7629052/1927256
https://blog.csdn.net/qq_37171353/article/details/77986422