Spring @MVC und die @RequestBody Annotation mit x-www-form-urlencoded Daten?

9

Ich versuche herauszufinden, warum ich keine Anfrage von einem jQuery.ajax-Aufruf erhalten kann, wenn die Spring @Controller -Handlermethode eine @RequestBody -Anmerkung enthält. Berücksichtigen Sie Folgendes:

HTML / JavaScript :

%Vor%

Java :

%Vor%

Das obige wird mit der vorhandenen @RequestBody Annotation fehlschlagen und einen 415 Fehler zurückgeben (es wird keine Ausnahme generiert). Wenn jedoch die Annotation @RequestBody entfernt wird (d. H. Die Parametersignatur ist nur FormDataObject formData ), wird die Methode aufgerufen und JSON wird an das JavaScript zurückgegeben.

Warum ist das der Fall? Eine POST -Anforderung enthält die Daten im Hauptteil der Anfrage. Sollte die Annotation eine solche Anfrage nicht bearbeiten?

Mir ist klar, dass ich den von JavaScript gesendeten Inhaltstyp in application/json und die Eigenschaft consumes in MediaType.APPLICATION_JSON_VALUE ändern kann, damit die Anmerkung richtig funktioniert. Aber warum funktioniert es nicht mit einer normalen Formularanforderung?

Hinweis : Ich verwende Spring 3.1.4.

    
James Sumners 08.05.2013, 19:56
quelle

3 Antworten

7

Haben Sie versucht, "org.springframework.web" aufzurufen, um den Grund für den zurückgegebenen Statuscode herauszufinden? Es sollte eine Ausnahme ausgelöst und protokolliert werden, bevor es in eine 415 übersetzt wird.

Auch wenn Sie Formulardaten senden, lassen Sie doch einfach @RequestBody weg. Sie verwenden dann die Datenbindung (d. H. @ModelAttribute), die Servlet-Anforderungsparameter an Objektfelder anwendet. Dies ist besser als der FormHttpMessageConverter.

    
Rossen Stoyanchev 09.05.2013 21:38
quelle
6

Als Spring Docs von @RequestBody heißt es, der Anfragetext würde von HttpMessageConverter in dein Objekt konvertiert werden.

Es gibt 4 Standard-HttpMessageConverter:

Um das url-kodierte Formular zu konvertieren, welches ajax.serialize () create ist, ist es der Job von FormHttpMessageConverter . Da Sie eine HttpMediaTypeNotSupportedException -Ausnahme haben, vermute ich, dass Sie FormHttpMessageConverter nicht konfiguriert haben. Überprüfen Sie Ihre Sprungkonfigurationsdatei, hier ein Beispiel:

%Vor%     
Qianyue 01.03.2015 10:32
quelle
-2

Das Problem ist, dass Spring, wenn wir application / x-www-form-urlencoded verwenden, es nicht als RequestBody versteht. Also, wenn wir das nutzen wollen Wir müssen die Annotation @RequestBody entfernen.

Versuchen Sie Folgendes:

%Vor%

Beachten Sie, dass die Annotation @RequestBody

entfernt wurde

antworten : Http Post-Anfrage mit Inhaltstyp Anwendung / x-www-form-urlencoded funktioniert nicht im Frühjahr

    
Douglas Ribeiro 07.07.2016 18:40
quelle

Tags und Links