@RequestBody oder @ModelAttribute mit Spring + REST-Webdiensten

9

Ich erstelle mit Spring 3.1 eine Restful-Website und Webdienste für iPhone- und Android-Apps. In meiner Anwendung verwende ich Spring Message Converters ( org.springframework.http.converter.json.MappingJacksonHttpMessageConverter ), um JSON in ein Java-Objekt zu konvertieren und umgekehrt.

  

Mein Ziel ist, dass es nur einen einzigen Controller geben sollte   Methode (gleiche URL), die von JSP-Seite, Iphone / Andois App verwendet werden sollte.

Ich benutze Spring Form-Tag für die Objektbindung von JSP zum Controller mit Hilfe von @ModelAttribute wie unten.

%Vor%

Aber das gleiche funktioniert NICHT in dem Fall, wenn die Daten von iPhone / Android-App veröffentlicht werden und das Ergebnis ist:

  

Daten empfangen == null;

Um dieses Problem zu lösen, habe ich @RequestBody Annotation an Stelle von @ModelAttribute verwendet.

Also mein Controller sieht wie folgt aus:

%Vor%

Es funktioniert dann und das Ergebnis, das ich habe, ist:

  

Daten erhalten == Somedata;

Aber @RequestBody funktioniert dann nicht mit Spring Form auf JSP-Seite und die Daten werden nicht in Objekt konvertiert und ich habe null -Werte.

  1. Kann ich @RequestBody Annotation nicht verwenden, um Daten in Form von JSON zu veröffentlichen mit Springform-Tag von JSP Seite ??
  2. Gibt es einen Weg, mit dem ich Daten aus meinem JSP-Formular als veröffentlichen kann gut, da ich App nur mit einer einzigen Controller-Methode (entweder @ModelAttribute oder @RequestBody) anrufe.

BEARBEITEN:

Während ich String anstelle der Bean-Klasse schreibe, kann ich den Inhalt in Form von normalem Text erhalten, wie unten:

%Vor%

Ergebnis vom Aufruf der Webseite:

  

uid = 11 & amp; confirmPassword = somepassword & amp; newPassword = somepassword

Ergebnis vom iPhone mit Web-Service-Aufruf (in ** JSON ) **

%Vor%

Aber das Problem ist, dass ich mit diesem Ansatz die JSON-Zeichenfolge manuell in Java-Objekte analysieren muss. Und im Webseiteninhalt muss ich die Werte manuell finden, die ich nicht will.

Bitte helfen Sie.

Grüße,

Arun Kumar

    
Arun Kumar 05.11.2012, 09:52
quelle

2 Antworten

3

Entschuldigung, aber ich glaube nicht, dass es einen Weg gibt, weil @ModelAttribute von den Form-Post-Parametern gebunden ist und @RequestBody den Körper direkt an den Json-Konverter übergibt. Sie könnten das Spring-Form-Tag durch einen einfachen Json-Post ersetzen, aber das ist wahrscheinlich weniger praktisch als zwei @RequestMapping-Methoden.

    
Kevin Schmidt 05.11.2012 10:30
quelle
0

Es ist @RequestBody. Ich denke, es ist besser, den Mime-Typ zu spezifizieren, den Sie erwarten und den Sie mit @RequestMapping als Ausgabe produzieren,

%Vor%

Registrieren Sie dann die entsprechenden Nachrichtenkonverter mit AnnotationMethodHandlerAdapter

Dieser Nachrichtenkonverter ist verantwortlich für Marshalling & amp; Unmarshalling Ihrer Anfrage & amp; Response-Entity auf Basis von & amp; verbraucht Attribute.

%Vor%     
user1157934 06.11.2012 11:22
quelle

Tags und Links