Spring MVC @RequestBody erhalten einen Objekt-wrapper mit nicht-primitiven Parametern

Ich erstellen der JSON wie folgt:

    var manager = {
        username: "admin",
        password: "admin"
    };
    var userToSubscribe = {
        username: "newuser",
        password: "newpassword",
        email: "[email protected]"
    };

    var openid = "myopenid";

    var subscription = {
            manager: manager,
            userToSubscribe : userToSubscribe,
            openid : openid
    };

    $.ajax({
        url: '/myapp/rest/subscribeUser.json',
        type: 'POST',
        dataType: 'json',
        contentType: 'application/json',
        mimeType: 'application/json',
        data: JSON.stringify({subscription : subscription})   
    });

Dies ist die JSON gesendet:

{"subscription":{"manager":{"username":"admin","password":"admin"},"userToSubscribe":{"username":"newuser","password":"newpassword","email":"[email protected]"},"openid":"myopenid"}}  

Und ich möchte diese Karte JSON, um eine Wrapper-Klasse. Dies ist der wrapper:

private class Subscription{
    private User manager;
    private User userToSubscribe;
    private String openid;
    public User getManager() {
        return manager;
    }
    public void setManager(User manager) {
        this.manager = manager;
    }
    public User getUserToSubscribe() {
        return userToSubscribe;
    }
    public void setUserToSubscribe(User userToSubscribe) {
        this.userToSubscribe = userToSubscribe;
    }
    public String getOpenid() {
        return openid;
    }
    public void setOpenid(String openid) {
        this.openid = openid;
    }
}

Jackson Abhängigkeit in der pom.xml (ich bin mit spring 3.1.0.RELEASE):

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.10</version>
    </dependency>

Das mapping in rest-servlet.xml

<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>

Und der header von der controller-Methode:

public @ResponseBody SimpleMessage subscribeUser(@RequestBody Subscription subscription)

Als ein Ergebnis der POST erhalte ich einen 400-Falsche Anfrage Fehler. Ist es möglich dies zu tun, oder tun ich muss es tun mit @RequestBody String oder @RequestBody Map<String,Object> und decodieren des JSON mich?

Dank!

  • Es sollte nichts Sie daran hindern, dies zu tun. Fehler 400 gibt etwas falsch mit der Anfrage oder die Zuordnung. Hat die User Klasse haben ein Standard no-arg-Konstruktor.
  • Der wrapper ist ein absolut anderes Konzept in Java, was Sie haben ein paar Objekte, die Sie wollen zu aggregieren, die in der äußeren Klasse.
  • welche version von spring, die Sie verwenden?
  • Können Sie nach dem mapping für die controller-Methode und der code, sendet die JSON?
  • Geben Sie eine minute, ich werde den Beitrag aktualisieren
  • Der post ist jetzt aktualisiert. Ich meine pom Abhängigkeiten, spring-version und die Wandler. Hoffe es hilft

InformationsquelleAutor mannuk | 2013-10-31
Schreibe einen Kommentar