j'ai un service Spring MVC avec cette signature:
@RequestMapping(method = RequestMethod.POST, value = "/addUser", consumes = "application/json")
public @ResponseBody User addUser(@RequestBody User user) {
Et cela dans context.xml
<bean id="jacksonMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonMessageConverter" />
</list>
</property>
</bean>
Je fais une demande de poste et me retourne toujours une demande de 400errors -> Bad. J'écris un filtre pour lire le contenu de la requête et ceci est:
Modifier json:
{
"email": "Anchor",
"latitude": 40.3139461,
"longitude": -3.8810229,
"name": "a",
"online": true,
"password": "a",
"deviceRegId": "APA91bGnD1EuqEm9cpoHsenC-HEphQJRniEnhPovK24QkKkLBXrDesSCP6CFlyOKwR1huwSI28Wd-DdN0N8MDKle7myYB7Dznzc3Z11ZOv3jMlJEIegykpnnnYScrElw2czQEa4pKFeQW7BklUsUS-IB15LMqH_Ag"
}
Edit: La classe d'utilisateurs
public class User implements Serializable{
@JsonProperty("deviceRegId")
private Java.lang.String deviceRegistrationID;
@JsonProperty("email")
private Java.lang.String email;
@JsonProperty("latitude")
private Java.lang.Double latitude;
@JsonProperty("longitude")
private Java.lang.Double longitude;
@JsonProperty("name")
private Java.lang.String name;
@JsonProperty("online")
private Java.lang.Boolean online;
@JsonProperty("password")
private Java.lang.String password;
public User(String deviceRegid) {
this.deviceRegistrationID = deviceRegid;
this.online = true;
}
public Java.lang.String getDeviceRegistrationID() {
return deviceRegistrationID;
}
public Java.lang.String getEmail() {
return email;
}
public void setEmail(Java.lang.String email) {
this.email = email;
}
public Java.lang.Double getLatitude() {
return latitude;
}
public void setLatitude(Java.lang.Double latitude) {
this.latitude = latitude;
}
public Java.lang.Double getLongitude() {
return longitude;
}
public void setLongitude(Java.lang.Double longitude) {
this.longitude = longitude;
}
public Java.lang.String getName() {
return name;
}
public void setName(Java.lang.String name) {
this.name = name;
}
public Java.lang.Boolean getOnline() {
return online;
}
public void setOnline(Java.lang.Boolean online) {
this.online = online;
}
/**
* @return value or {@code null} for none
*/
public Java.lang.String getPassword() {
return password;
}
/**
* @param password
* password or {@code null} for none
*/
public void setPassword(Java.lang.String password) {
this.password = password;
}
Quel est le problème?
S'il vous plaît supprimer le constructeur paramétrée et voilà. :)
public User(String deviceRegid) {
this.deviceRegistrationID = deviceRegid;
this.online = true;
}
Parce que, à la liaison de données, le constructeur par défaut est appelé.
Vérifiez vos données JSON:
{
"email": "Anchor",
"latitude": 40.3139461,
"longitude": -3.8810229,
"name": "a",
"online": true,
"password": "a",
"deviceRegId": "APA91bGnD1EuqEm9cpoHsenC-HEphQJRniEnhPovK24QkKkLBXrDesSCP6CFlyOKwR1huwSI28Wd-DdN0N8MDKle7myYB7Dznzc3Z11ZOv3jMlJEIegykpnnnYScrElw2czQEa4pKFeQW7BklUsUS-IB15LMqH_Ag"
}
Vérifiez les choses suivantes:
Vérifiez également si JSON value est pris en charge par le nom de champ correspondant datatype in User class.
Essayez-le, j'ai fait face au même problème plusieurs fois.
J'ai eu une mauvaise demande aussi. Et parfois une mauvaise syntaxe, etc. Mais je l'ai corrigé avec une autre dépendance de Jackson:
Au lieu de Codehause Jackson, j'utilise maintenant plus rapidexml:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.3.3</version>
</dependency>
J'allais deviner que le problème venait de consumes = "application/json"
, et peut-être que c'est ... mais j'ai fait un test rapide en ajoutant cette restriction à mon environnement (qui ne spécifie pas qu'il envoie "application/json"
)
et à la place, j'ai obtenu un "Type de support 415 non pris en charge".
Néanmoins, je recommande de supprimer cela et voir si cela aide.