今天從前端利用jQuery ajax傳送json資料至Spring MVC的Controller時,出現以下錯誤
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported
造成問題的程式碼如下。
前端頁面送出json的jQuery。
$.ajax({
url: ...,
method:"post",
contentType:"application/json;charset=utf-8",
dataType:"json",
data: JSON.stringify(formData),
success: function(data) { ... }
});
處理請求的Controller
@PostMapping(value="/user/add", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public String add(@RequestBody MultiValueMap map) throws Exception {
...
}
造成例外錯誤是因為@RequestBody
標記的參數必須是一個model Object(DTO),例如UserProfile
,不可以是Map
,所以將@RequestBody MultiValueMap map
改為@RequestBody UserProfile userProfile
問題就解決了。
原本我的需求是因為form表單裡面有些欄位並不屬於model物件的成員,所以不想用model物件來接收json參數,改成用@RequestBody MultiValueMap map
來收,但就出現上述的問題
如果要用@RequestBody MultiValueMap map
來接收form表單的參數,則前端jQuery ajax的contentType
必須改為application/x-www-form-urlencoded; charset=UTF-8
,且form表單資料只要serialized即可,不用json字串化。
$.ajax({
url: ...,
method:"post",
contentType:"application/x-www-form-urlencoded; charset=UTF-8",
dataType:"json",
data: formData,
success: function(data) { ... }
});
參考:
沒有留言:
張貼留言