RequestBody einer REST-Anwendung
Iam bisschen neu SpringMVC REST-Konzept. Brauche eine Hilfe von den Experten hier zu verstehen/beheben folgende Problem,
Ich entwickelte eine SpringMVC-Anwendung, die folgende ist ein Teil einer controller-Klasse code, und es funktioniert perfekt ok mit der Art, wie es ist, bedeutet, dass es funktioniert ok mit der JSON-Objekt geben,
@RequestMapping(method = RequestMethod.POST, value = "/user/register")
public ModelAndView addUser( @RequestBody String payload) {
try{
ObjectMapper mapper = new ObjectMapper();
CreateNewUserRequest request = mapper.readValue(payload, CreateNewUserRequest.class);
UserBusiness userBusiness = UserBusinessImpl.getInstance();
CreateNewUserResponse response = userBusiness.createNewUser(request);
return new ModelAndView(ControllerConstant.JASON_VIEW_RESOLVER, "RESPONSE", response);
- und das ist meine rest-servlet.xml sieht aus wie
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<bean id="jsonViewResolver" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<bean id="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonConverter" />
</list>
</property>
</bean>
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json" />
</bean>
<bean name="UserController" class="com.tap.mvp.controller.UserController"/>
Mein problem ist, wie mache ich es funktioniert für den normalen POST-request, Mein controller, sollten Sie nicht akzeptieren JSON-Objekt geben Sie stattdessen sollte es für den normalen HTTP POST-Variablen.
Wie bekomme ich die Werte aus der Anfrage?Welche änderungen sollte ich die getan werden müssen. Ich brauche, um loszuwerden,
ObjectMapper mapper = new ObjectMapper();
CreateNewUserRequest request = mapper.readValue(payload, CreateNewUserRequest.class);
und stattdessen hinzufügen müssen, erstellen Sie eine Instanz der
CreateNewUserRequest
Klasse, ruft deren Konstruktor auf. Für die, die ich brauche, um die Werte aus der Anfrage. Wie mache ich das? Kann ich die Behandlung @RequestBody String payload als eine Karte und Holen Sie sich die Werte? oder gibt es eine bestimmte Art und Weise, um Werte aus dem request des HTTP-POST-Methode? folgende Werte werden in der Anforderung,
firstName, lastName, email,Passwort
InformationsquelleAutor bluelabel | 2012-01-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du vermischt zwei Konzepte hier. Der REST service in Spring MVC ist viel eleganter als der Frühling verarbeitet JSON/XML-marshalling für Sie:
Beachten Sie die
@ResponseBody
annotation. Sie brauchen keine view-Resolver-und Handbuch JSON-marshalling. Und bekommen Sie eine XML - (über JAXB) kostenlos.Allerdings Daten per Formular-POST-ist sehr unterschiedlich. Ich würde vorschlagen, erstellen zweite mapping Umgang mit verschiedenen Medien Typ:
Mit dieser Konfiguration REST-Aufrufe mit
Content-type=application/json
weitergeleitet werden zunächst Methode und form POST-Anfragen an den zweiten (zumindest in der Theorie, habe es nicht ausprobiert). Beachten Sie, dass gibt es einfachere Möglichkeiten zum behandeln von form-Daten im Frühjahr im Vergleich zu raw@RequestParam
annotation finden Sie unter: Übergeben Sie ein Anfrage-parameter in Spring MVC 3.Danke, behoben. Zu viel Scala :-). BTW kann man Bearbeiten (oben, einige Ruf-Ebene) jeder Frage und Antwort hier, wie in wiki. Fühlen Sie sich frei, um Fehler zu korrigieren!
InformationsquelleAutor Tomasz Nurkiewicz
Eine weitere Antwort auf die OP und die genaue Frage ist, um die
consumes
content-type"text/plain"
und dann deklarieren Sie eine@RequestBody String
input-parameter. Dies wird geben Sie den text der POST-Daten in der angegebenenString
variable (postPayload
im folgenden Beispiel).Natürlich, dies setzt Voraus, dein POST Nutzlast text-Daten ist (wie der OP erklärte, der Fall war).
Beispiel:
InformationsquelleAutor simon