2017-05-23 1 views
0

j'ai suivant contrôleur:"statut": 415, "erreur": "Type non pris en charge des médias"

@PostMapping(value = {"/test/set_timeout"}) 
    @ResponseBody 
    public void setAlertTimeout(@RequestBody Long timeout) { 

et je fais suite à la demande de postier: enter image description here

texte d'erreur:

{"timestamp":1495560868392,"status":415,"error":"Unsupported Media Type","exception":"org.springframework.web.HttpMediaTypeNotSupportedException","message":"Content type 'multipart/form-data;boundary=----WebKitFormBoundary9IbVq5JAKxCYUs7P;charset=UTF-8' not supported","path":"/test/set_timeout"} 

Quelle est la raison du problème et comment envoyer une demande correcte?

P.S.

Si utiliser

public static class LongWrapper{ 
     private long timeout; 

     public long getTimeout() { 
      return timeout; 
     } 

     public void setTimeout(long timeout) { 
      this.timeout = timeout; 
     } 
    } 

au lieu de Long et passer JSON ({"timeout":"2"}) - il fonctionne correctement

+0

Veuillez vérifier ceci: https://stackoverflow.com/questions/43753357/http-status-415-post-json-data-to-spring-mvc-4-using-ajax-also-used-spring- sec? answertab = votes # tab-top – Zionz

Répondre

0

Lors de la lecture JSON votre type de contenu doit être application/JSON.

+0

Où voyez-vous json? – gstackoverflow

0

si vous avez besoin d'utiliser le type d'application/JSON et écrire ci-dessous le code dans la méthode du contrôleur: -

@RequestMapping(method = RequestMethod.POST, produces = "application/json", consumes = "application/json") 
    public RestResponse save(@RequestParam("timestamp") String timestamp, @RequestParam("status") String status) { 
+0

Je veux utiliser le corps – gstackoverflow

+0

Pourquoi pensez-vous que je veux utiliser json? – gstackoverflow

+0

utilise 'RequestBody' – Sharma

0

@RequestBody est utilisé pour désérialiser JSON-POJO. Si vous devez soumettre des données de formulaire au contrôleur essayer quelque chose comme

@PostMapping(value = {"/test/set_timeout"}) 
@ResponseBody 
public void setAlertTimeout(HttpServletRequest request) { 
    Long l = request.getParameter("timeout"); 
    // continue 
} 
0

Dans votre demande, vous envoyez la propriété dans un délai d'attente multipart/form-data corps. Dans Facteur, sélectionnez l'option 'raw' pour le corps et définissez le type de contenu sur application/json. Entrez ensuite le contenu suivant:

{timeout: 4} 

Vous devez également définir la consommation de MediaType sur votre contrôleur. (Bien qu'il puisse être qu'il résout automatiquement à JSON) Par exemple:

@PostMapping(value = {"/test/set_timeout"}, consumes = {MediaType.APPLICATION_JSON_VALUE}) 
0

Il n'y a pas besoin d'ajouter un en-tête de type de contenu manuellement. Vous remplacez la valeur définie par Postman. Sélectionnez simplement les données de formulaire dans la requête POST et envoyez votre demande pour voir si cela fonctionne.