Spring mvc mauvaise demande avec @requestbody
j'ai un Spring MVC service avec cette signature:
@RequestMapping(method = RequestMethod.POST, value = "/addUser", consumes = "application/json")
public @ResponseBody User addUser(@RequestBody User user) {
Et ce 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 faire une requête Post et toujours me rendre un 400error->Bad request.
J'écris un filtre pour lire le contenu de demande et, est-ce:
Modifier json:
{
"email": "Anchor",
"latitude": 40.3139461,
"longitude": -3.8810229,
"name": "a",
"online": true,
"password": "a",
"deviceRegId": "APA91bGnD1EuqEm9cpoHsenC-HEphQJRniEnhPovK24QkKkLBXrDesSCP6CFlyOKwR1huwSI28Wd-DdN0N8MDKle7myYB7Dznzc3Z11ZOv3jMlJEIegykpnnnYScrElw2czQEa4pKFeQW7BklUsUS-IB15LMqH_Ag"
}
Edit: L'utilisateur de la classe
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?
source d'informationauteur colymore
Vous devez vous connecter pour publier un commentaire.
Veuillez retirer le paramétrées constructeur et là vous allez. 🙂
Parce qu'à la liaison de données constructeur par défaut est appelé.
Vérifier vos données json:
Vérifier les choses suivantes:
Également vérifier si JSON valeur est pris en charge par le nom de champ correspondant type de données dans la classe Utilisateur.
Ne l'essayer, j'ai rencontré le même problème à de nombreuses reprises.
Je vais deviner le problème est avec
consumes = "application/json"
et c'est peut-être... mais j'ai fait un test rapide en ajoutant que la restriction à mon environnement (ce qui n'est pas spécifier qu'il s'agit de l'envoi de"application/json"
),et à la place j'ai eu un "415 non pris en charge Type de média".
Encore, je vous recommande de le retirer et voir si ça aide.
J'ai eu une mauvaise demande trop. Et parfois mauvaise syntaxe etc. Mais je l'ai fixée avec un autre Jackson Dépendance:
Au lieu de Codehause Jackson, j'utilise maintenant fasterxml: