Au REPOS du ressort @RequestBody est toujours vide

Donc après j'ai corrigé le '415 de support non pris en charge" erreur (415 médias qui ne sont pas pris en charge), j'ai rencontré un nouveau problème. Mon RequestBody est toujours vide. Quand j'ai envoyer une demande via Chrome Facteur je reçois toujours un sérialisé entité de retour avec uniquement des valeurs nulles. Je suis à l'aide de Spring (4.2.3.RELEASE),Jackson-databind (2.6.3) et jackson-core (2.6.3) dans mon projet. Je suis à l'aide de l'annotation en fonction de la configuration de mon projet (@EnableWebMvc à faire le printemps de découvrir automatiquement HTTPMessageConverters).


D'autres postes

Je suis conscient des autres postes sur stackoverflow, avec presque le même problème. Pourtant, ils ne me fournissent pas une réponse. Aussi la plupart des postes sont âgés de Printemps versions (avant 4.0), de sorte que certaines choses sont assez différentes maintenant.

Des postes similaires:

@RepsonseBody est toujours vide au Printemps

Le printemps @RequestBody fournissant chaîne vide sur le POST

À l'aide de HttpServletRequest request


Printemps contrôleur

Dans mon Printemps @RestController j'ai le code suivant:

@RequestMapping(value = "/location/update/{id}", method = RequestMethod.PUT)
public UserLocation updateUserLocation(@PathVariable("id") int id, UserLocation user) {        
        return user;        
}

Je suis en utilisant un modèle de classe (UserLocation) pour ma liaison de données. C'est parce que de cette façon j'ai plus de contrôle sur les données de mon API envoie et reçoit.


De la liaison de données de la classe (UserLocation)

La UserLocation classe consite de 3 propriétés avec un constructeur et les getters et les setters. (J'ai pu faire ces propriétés publiques, mais je tiens d'abord à résoudre ce problème).

public class UserLocation {

    private Float latitude;

    private Float longitude;

    private Date lastActive;
}

JSON corps

Via mon AngularJS appel Ajax ($http.PUT) je fais un appel au printemps contrôleur avec les données suivantes:

 {
    "latitude": 52.899370,
    "longitude": 5.804548,
    "lastActive": 1449052628407
 }

Facteur de demande de

Je développe une application Cordova, donc, pour les demandes de test sans la nécessité du développement de mon application sur mon téléphone portable, je suis en utilisant Chrome Facteur Plugin.

Je fais l'appel suivant:

URL: http://server:port/app/location/update/1

Method: PUT

Headers: Content-Type: application/json

Body:

{
    "latitude": 52.899370,
    "longitude": 5.804548,
    "timestamp": 1449052628407
}

Résultat de la demande

Avec la demande, j'obtiens le résultat suivant:

{"latitude":null,"longitude":null,"lastActive":null}

Cela signifie que le Printemps n'créer une nouvelle instance de mon UserLocation classe, mais il n'a pas le remplir avec les données de l'organisme..


Printemps méthode PUT

Lors de l'utilisation de la méthode PUT, au Printemps de contrôleur, n'est-ce pas l'entité immédiatement mis à jour? Cela signifierait qu'il n'y aurait pas de logique supplémentaire dans le contrôleur pour la mise à jour de l'entité de droit? (si l'entité est bien sûr un Hibernate/JPA, modèle, qui peut être mis à jour).


Je n'arrive pas à comprendre le problème. Quelqu'un sait ce que je fais de mal?


Mise à jour

Ajoutant @RequestBody à mon contrôleur de code:

@RequestMapping(value = "/location/update/{id}", method = RequestMethod.PUT)
public UserLocation updateUserLocation(@PathVariable("id") int id, @RequestBody UserLocation user) {        
            return user;        
}

Me ramène à ma question initiale (415 médias qui ne sont pas pris en charge). L'ajout de cette lance un 415 Médias qui ne sont pas pris en charge erreur que je n'arrive pas à le résoudre.


Fixe. La Solution ci-dessous

  • Je ne pense pas que cela ait quelque chose à voir avec le problème, cependant, avec Facteur vous envoyez "lattitude" au lieu de "latitude" et "timestamp" au lieu de "lastActive".
  • merci pour le headsup. Je pensais que j'avais changé. Je suis de changement dans le post. (code était déjà à jour)
  • vos problèmes ont été résolu ?
  • Oui. Dans ce cas, Driss Amri et vous a donné la solution. Le total de la solution peut être trouvée dans stackoverflow.com/questions/34067101/...
InformationsquelleAutor Mr.wiseguy | 2015-12-04