错误描述
在使用post请求添加信息时,一直报错415,如下:
HTTP 415错误
不支持的媒体类型
原因有很多种,具体我也不是很清楚啊哈哈哈哈
解决
问题在于,当我们使用application / x-www-form-urlencoded时,Spring不会将其理解为RequestBody。因此,如果要使用它,则必须删除@RequestBody
注解。
错误解决之前的代码:
@PostMapping("/article")
@ResponseBody
public String insertArticle(@RequestBody Article article) {
articleService.insertArticle(article);
return "success" ;
}
错误解决之后的代码(去掉@RequestBody注解):
@PostMapping("/article")
@ResponseBody
public String insertArticle(Article article) {
articleService.insertArticle(article);
return "success" ;
}
解决方法参考自 zpzkitt.
下面,我们再来学习一下@RequestBody
注解吧。
@RequestBody
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestBody {
boolean required() default true;
}
看源码可知,RequestBody 用在方法参数上面。
该注解用来将请求参数绑定到request body中,通过HttpMessageConverter封装为具体的JavaBean。
简单的说就是在一个参数上加上该注解,spring就会将request body中的json/xml对象解析成该参数类型的Javabean对象。
RESTful风格开发中经常用到该注解。
@RequestBody
注解的原理
我在网上看到的,这个博主写的很不错。
我查看网上的@RequestBody注解时,发现很多关于 用@RequestBody来接收参数时, SpringMvc 报错:传递的参数与实际接口接受的参数不符合的问题,
还发现大家的解决方案大部分都是去掉@RequestBody注解。
需要注意的是:
@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容(application/json或application/xml等)。一般情况下来说常用其来处理application/json类型。
@RequestBody接收的是一个json格式的字符串
Json对象和Json字符串
JSON对象
var person={"name":"zhangsan","sex":"男","age":"24"}//json对象
alert(person.name);//zhangsan
alert(typeof person);//object
person就是json对象。可以用perosn.name这种方式进行属性的调用。第三行代码就是看person的类型,为object类型。
JSON字符串
字符串,我们常说的JavaScript中的字符串是单引号或者双引号引起来的。
var person='{"name":"zhangsan","sex":"男","age":"24"}';//json字符串
alert(person);//{"name":"zhangsan","sex":"男","age":"24"}
alert(typeof person);//string
person就是一个json字符串,之所以叫json字符串,因为字符串的格式符合json的格式,第三行代码也匹配其中的类型为string。
JSON字符串和JOSN对象的转换
json字符串转json对象,调用parse方法:
JSON.parse(person);
json对象转为json字符串,调用stringify方法:
JSON.stringify(person);