ich die JSON erstellen wie folgt:Spring MVC @RequestBody erhalten eine Objekt-Wrapper mit nicht-primitive Attribute
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, die gesendet wird:
{"subscription":{"manager":{"username":"admin","password":"admin"},"userToSubscribe":{"username":"newuser","password":"newpassword","email":"[email protected]"},"openid":"myopenid"}}
Und ich möchte Ordnen Sie diesen JSON einer Wrapper-Klasse zu. 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;
}
}
Die jackson Abhängigkeit in der pom.xml (Ich bin mit Feder 3.1.0.RELEASE):
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.10</version>
</dependency>
Die Abbildung 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 Kopf der Controller-Methode:
public @ResponseBody SimpleMessage subscribeUser(@RequestBody Subscription subscription)
Als Ergebnis des POST erhalte ich einen Fehler 400 falsche Anfrage. Ist es möglich, dies zu tun oder muss ich es mit @RequestBody
String oder @RequestBody Map<String,Object>
tun und den JSON selbst dekodieren?
Danke!
Es sollte nichts daran hindern, dies zu tun. Fehler 400 zeigt an, dass etwas mit der Anforderung oder dem Mapping falsch ist. Hat die 'User' Klasse einen Standard-NO-Arg-Konstruktor. –
Der Wrapper ist ein absolut anderes Konzept in Java, was Sie ein paar Objekte haben, die Sie in der äußeren Klasse aggregieren möchten. –
Welche Federversion verwenden Sie? –