錯誤描述
在使用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);