JsonMappingException: ne Peut pas désérialiser instance de java.lang.Entier de START_OBJECT jeton
Je voulais écrire un petit et simple RESTE de service à l'aide de Printemps de Démarrage.
Voici le RESTE du code de la fonction:
@Async
@RequestMapping(value = "/getuser", method = POST, consumes = "application/json", produces = "application/json")
public @ResponseBody Record getRecord(@RequestBody Integer userId) {
Record result = null;
//Omitted logic
return result;
}
L'objet JSON, j'ai envoyé est le suivant:
{
"userId": 3
}
Et ici, c'est l'exception que j'ai eu:
AVERTIR 964 --- [ XNIO-2 tâche-7]
.w.s.m.s.DefaultHandlerExceptionResolver : impossible de lire HTTP
message:
org.springframework.http.convertisseur de.HttpMessageNotReadableException:
Ne pouvait pas lire le document: ne Peut pas désérialiser instance de
java.lang.Entier de START_OBJECT jeton à [Source:
java.io.PushbackInputStream@12e7333c; ligne: 1, colonne: 1]; imbriqué
exception est com.fasterxml.jackson.databind.JsonMappingException: Peut
pas désérialiser instance de java.lang.Entier de START_OBJECT
jeton à [Source: java.io.PushbackInputStream@12e7333c; ligne: 1,
colonne: 1]
Vous devez vous connecter pour publier un commentaire.
Évidemment Jackson ne peut pas désérialiser le passé JSON dans un
Integer
. Si vous insistez pour envoyer une représentation JSON d'un Utilisateur à travers le corps de la requête, vous devez vous encapsuler leuserId
dans un autre bean comme suit:Ensuite l'utiliser bean comme votre méthode de gestionnaire d'argument:
Si vous n'aimez pas la surcharge de la création d'un autre bean, vous pouvez passer l'
userId
dans le cadre de Variable de Chemin d'accès, par exemple/getuser/15
. Pour ce faire:Puisque vous n'avez plus à envoyer un JSON dans le corps de la requête, vous devez retirer l'
consumes
attribut.application/json
, vous pouvez envoyer une paire clé-valeur, par exempleuserId=15
dans le corps de la requête à l'aide deapplication/x-www-form-urlencoded
Peut-être que vous essayez d'envoyer une requête JSON texte dans son corps à partir d'un Facteur de client ou quelque chose de similaire comme ceci:
Ce ne peut pas être désérialisé par Jackson puisque ce n'est pas un Entier (il semble l'être, mais elle n'est pas). Un objet Integer à partir de java.lang Entier est un peu plus complexe.
Pour votre Facteur de demande de travail, il suffit de mettre (sans les accolades { }):