Type de contenu application/x-www-form-urlencoded;charset=UTF-8' pas pris en charge pour @RequestBody MultiValueMap
En fonction de la réponse pour le problème avec x-www-form-urlencoded avec le Printemps @Contrôleur
J'ai écrit ci-dessous @Contrôleur méthode
@RequestMapping(value = "/{email}/authenticate", method = RequestMethod.POST
, produces = {"application/json", "application/xml"}
, consumes = {"application/x-www-form-urlencoded"}
)
public
@ResponseBody
Representation authenticate(@PathVariable("email") String anEmailAddress,
@RequestBody MultiValueMap paramMap)
throws Exception {
if(paramMap == null || paramMap.get("password") == null) {
throw new IllegalArgumentException("Password not provided");
}
}
la demande à laquelle échoue avec l'erreur ci-dessous
{
"timestamp": 1447911866786,
"status": 415,
"error": "Unsupported Media Type",
"exception": "org.springframework.web.HttpMediaTypeNotSupportedException",
"message": "Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported",
"path": "/users/usermail%40gmail.com/authenticate"
}
[PS: Jersey a été beaucoup plus amical, mais ne pouvait pas l'utiliser maintenant, étant donné les restrictions pratiques ici]
- Avez-vous ajouter consomme = {"application/x-www-form-urlencoded"} dans @RequestBody?
- Comment avez-vous d'exécuter la demande? ajouter le code de (js,jquery, curl ou ce que vous utilisez ) .
- J'ai le même problème. Dans mon cas, j'utilise ajax de jquery pour afficher les données et les données sont
JSON.stringify({"ordersToDownload":"00417002"}
- C'est le code que j'utilise:
$.ajax({url:"/myurl", type:"POST", data: JSON.stringify({"someAttribute":"someData"}) })
- Vérifier ma réponse out entrez description du lien ici
Vous devez vous connecter pour publier un commentaire.
Le problème est que lorsque nous utilisons application/x-www-form-urlencoded, le Printemps n'est pas à la comprendre comme une RequestBody. Donc, si nous voulons utiliser cette
nous devons supprimer les @RequestBody annotation.
Essayez les solutions suivantes:
Note, qui a supprimé l'annotation @RequestBody
réponse: Requête Http Post avec un type de contenu application/x-www-form-urlencoded pas de travail au Printemps
application/x-www-form-urlencoded
?Il semble que maintenant vous pouvez simplement marquer le paramètre de méthode avec
@RequestParam
et il fera le travail pour vous.Ajouter un en-tête à votre demande de définir type de contenu application/json
cette façon de printemps sait comment analyser le contenu.
J'ai écrit à propos d'une variante dans cette StackOverflow répondre.
Là que j'ai écrit, étape par étape, en expliquant avec code. Le chemin court:
Première: écrire un objet
Deuxième: créer un convertisseur de cartographie le modèle de l'extension de la AbstractHttpMessageConverter
Troisième: dites au printemps utilisez ce convertisseur de mise en œuvre d'un WebMvcConfigurer.class substitution de la configureMessageConverters méthode
Quatrième et finale: à l'aide de ce cadre de mise en œuvre de la cartographie à l'intérieur de votre contrôleur de l'consomme = MediaType.APPLICATION_FORM_URLENCODED_VALUE et @RequestBody en face de votre objet.
Je suis en utilisant le printemps de démarrage 2.
Dans Le Ressort 5
Au lieu d'utiliser une Carte, vous pouvez utiliser les paramètres directement: