मैं यह पता लगाने की कोशिश कर रहा हूं कि मुझे jQuery.ajax कॉल से अनुरोध क्यों प्राप्त नहीं हो सकता है जब वसंत @Controller
हैंडलर विधि में @RequestBody
एनोटेशन शामिल है। निम्नलिखित पर विचार करें:वसंत @ एमवीसी और @RequestBody एनोटेशन एक्स-www-form-urlencoded डेटा के साथ?
HTML/जावास्क्रिप्ट:
<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>
जावा:
@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 जावास्क्रिप्ट पर वापस कर दिया जाएगा।
ऐसा क्यों है? POST
अनुरोध में अनुरोध के शरीर में डेटा शामिल है। एनोटेशन प्रक्रिया ऐसी अनुरोध नहीं करनी चाहिए?
मुझे एहसास है कि मैं जावास्क्रिप्ट द्वारा भेजे गए सामग्री प्रकार को application/json
और consumes
संपत्ति MediaType.APPLICATION_JSON_VALUE
पर एनोटेशन कार्य सही तरीके से करने के लिए बदल सकता है। लेकिन यह सामान्य फॉर्म अनुरोध के साथ क्यों काम नहीं करता है?
नोट: मैं वसंत 3.1.4 का उपयोग कर रहा हूँ।
http://matthewsalvatore.blogspot.com.br/2013 /08/spring-framework-working-with-x-www.html – Allenaz