@RequestBody oder @ModelAttribute mit Feder+REST web services
Bin ich zum erstellen eines Restful-website und Web-services für das iPhone und android-apps mit Frühjahr 3.1. In meiner Anwendung, ich bin mit Spring-Nachricht-Konverter (org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
) die Konvertierung von JSON in Java-Objekte und Umgekehrt.
Mein Ziel ist es, dass es nur eine einzige controller
Methode(gleiche URL), die verwendet werden sollte, die von der JSP-Seite, Iphone/Andois app.
Ich bin mit Feder form-tag für die Objekt-Bindung von JSP-controller mit Hilfe von @ModelAttribute
wie unten.
@RequestMapping(value = "reset-password", method = RequestMethod.POST)
public ModelAndView resetPassword(@ModelAttributeForgot forgotPassword,
HttpServletRequest request) {
System.out.println("data recived=="+forgotPassword.getNewPassword());
}
Aber der ist NICHT der Fall, wenn die Daten, die gebucht wird, aus der iPhone/Android app, und das Ergebnis ist:
Daten recived==null;
So, um dieses problem zu überwinden, das ich verwendet habe @RequestBody
Anmerkung am Ort der @ModelAttribute
.
Also mein controller sieht wie folgt aus:
@RequestMapping(value = "reset-password", method = RequestMethod.POST)
public ModelAndView resetPassword(@RequestBody Forgot forgotPassword,
HttpServletRequest request) {
System.out.println("data recived=="+forgotPassword.getNewPassword());
}
Funktioniert es dann und das Ergebnis, die ich habe ist:
Daten recived==somedata;
Aber @RequestBody dann nicht funktionieren mit Feder-form auf der JSP-Seite und die Daten nicht umgewandelt in das Objekt und ich habe null
Werte.
- Kann ich nicht
@RequestBody
Kommentar zu post-Daten in form von JSON
mit Feder form-tag aus der JSP-Seite?? - Gibt es eine Möglichkeit, mit denen kann ich post Daten von meinem JSP-form als
auch von der I-phone-App mithilfe von nur einer einzigen controller-Methode(entweder @ModelAttribute oder @RequestBody).
EDIT:
Beim schreiben String
im Ort der Bean-Klasse, ich bin in der Lage, die Inhalte in form von reinem text, wie folgt:
@RequestMapping(value = "reset-password", method = RequestMethod.POST)
public ModelAndView resetPassword(@RequestBody String string,
HttpServletRequest request) { }
Ergebnis von der web-Seite aufrufen:
uid=11&confirmPassword=somepassword&newPassword=somepassword
Ergebnis vom iPhone über die web-service-Aufruf(in **JSON)**
{"newPassword":"somepassword","confirmPassword":"somepassword","uid":"11"}
Aber das problem ist, dass mit diesem Ansatz habe ich den JSON-string Parsen in Java-Objekt manuell. Und in der web-Seite Inhalte, die ich finden müssen, um die Werte manuell ein, die ich nicht will.
Bitte helfen.
Grüße,
Arun Kumar
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sorry, aber ich glaube nicht, dass es einen Weg gibt, da @ModelAttribute gebunden ist, aus form post Parameter und @RequestBody geht der Körper direkt auf die Json-Konverter. Könnte man die Feder ersetzen form-tag mit einem einfachen json-post, aber das ist wahrscheinlich weniger komfortabel als mit zwei @RequestMapping Methoden.
Seine @RequestBody. Ich fühle, es ist besser, geben Sie den mime-Typ, den Sie erwarten und produzieren als Ausgabe mit @RequestMapping als,
Dann registrieren Sie sich entsprechende Meldung Wandler mit AnnotationMethodHandlerAdapter
Diese Nachricht converter ist verantwortlich für das Marshalling & unmarshalling Ihre Anfrage & Antwort-Entität basierend auf produziert & verbraucht Attribute.