我試圖找出爲什麼我無法接收到jQuery.ajax調用的請求,然後Spring @Controller
處理程序方法包含@RequestBody
註釋。考慮以下幾點:Spring @MVC和@RequestBody註解與x-www-form-urlencoded數據?
HTML/JavaScript的:
<form id="foo" action="/baz">
<input name="bar">
</form>
<script>
$(function() {
var $fooForm = $('#foo');
$fooForm.on('submit', function(evt) {
evt.preventDefault();
$.ajax({
url: $fooForm.action,
data: $fooForm.serialize(),
dataType: 'json',
type: 'POST',
success: function(data) { console.log(data); }
});
});
});
</script>
的Java:
@RequestMapping(
value = "/baz",
method = RequestMethod.POST,
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE,
produces = MediatType.APPLICATION_JSON_VALUE
)
public @ResponseBody SearchResults[] jqueryPostHandler(
@RequestBody FormDataObject formData)
{
return this.searchService.find(formData);
}
以上將失敗,@RequestBody
註釋本,並返回一個415錯誤(沒有異常會被生成)。但是,如果@RequestBody
註釋被刪除(即參數簽名只是FormDataObject formData
),那麼該方法將被調用,並且JSON將被返回給JavaScript。
爲什麼會出現這種情況?一個POST
請求包含請求正文中的數據。不應該註釋處理這樣的請求嗎?
我意識到我可以將JavaScript發送的內容類型更改爲application/json
和consumes
屬性爲MediaType.APPLICATION_JSON_VALUE
以使註釋正確工作。但爲什麼它不適用於正常的表單請求?
注意:我使用Spring 3.1.4。
http://matthewsalvatore.blogspot.com.br/2013 /08/spring-framework-working-with-x-www.html – Allenaz 2016-12-27 19:31:23