Neden bir jQuery.ajax çağrısından bir istek alamıyorum anlamaya çalışıyorum o zaman Bahar @Controller
eylemci yöntemi bir @RequestBody
ek açıklama içerir. Aşağıdaki düşünün:Spring @MVC ve @RequestBody ek açıklamaları x-www-form-urlencoded verilerle mi?
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);
}
üzerinde 415 hata @RequestBody
açıklama mevcut başarısız ve dönecektir (istisna olacak üretilecek). Ancak, @RequestBody
ek açıklaması kaldırılırsa (yani, parametre imzası yalnızca FormDataObject formData
), yöntem çağrılır ve JSON JavaScript'e döndürülür.
Bu neden böyle? Bir POST
isteği, isteğin gövdesindeki verileri içerir. Ek açıklama süreci böyle bir istek değil mi?
Ek açıklama yapmak için JavaScript tarafından gönderilen içerik türünü application/json
ve consumes
özelliğini MediaType.APPLICATION_JSON_VALUE
olarak değiştirebileceğimi anlıyorum. Ama neden normal form talebi ile çalışmıyor?
Not Not: Spring 3.1.4 kullanıyorum.
http://matthewsalvatore.blogspot.com.br/2013
Sonra aşağıdakileri deneyin /08/spring-framework-working-with-x-www.html – Allenaz