Question Http 415 Erreur de type de média non prise en charge avec JSON


J'appelle le service REST avec la demande JSON et il donne l'erreur HTTP "Type de support non pris en charge".

Le type de contenu de la demande est défini sur ("Content-Type", "application / json; charset = utf8").

Cela fonctionne très bien si je n'inclus pas l'objet Json dans la requête. J'utilise la bibliothèque google-gson-2.2.4 pour json.

J'ai essayé d'utiliser deux bibliothèques différentes, mais cela ne faisait aucune différence.

Quelqu'un peut-il m'aider s'il vous plaît pour résoudre ce problème?

Voici mon code:

public static void main(String[] args) throws Exception
{

    JsonObject requestJson = new JsonObject();
    String url = "xxx";

    //method call for generating json

    requestJson = generateJSON();
    URL myurl = new URL(url);
    HttpURLConnection con = (HttpURLConnection)myurl.openConnection();
    con.setDoOutput(true);
    con.setDoInput(true);

    con.setRequestProperty("Content-Type", "application/json; charset=utf8");
    con.setRequestProperty("Accept", "application/json");
    con.setRequestProperty("Method", "POST");
    OutputStream os = con.getOutputStream();
    os.write(requestJson.toString().getBytes("UTF-8"));
    os.close();


    StringBuilder sb = new StringBuilder();  
    int HttpResult =con.getResponseCode();
    if(HttpResult ==HttpURLConnection.HTTP_OK){
    BufferedReader br = new BufferedReader(new   InputStreamReader(con.getInputStream(),"utf-8"));  

        String line = null;
        while ((line = br.readLine()) != null) {  
        sb.append(line + "\n");  
        }
         br.close(); 
         System.out.println(""+sb.toString());  

    }else{
        System.out.println(con.getResponseCode());
        System.out.println(con.getResponseMessage());  
    }  

}
public static JsonObject generateJSON () throws MalformedURLException

{
   String s = "http://www.abc.com";
        s.replaceAll("/", "\\/");
    JsonObject reqparam=new JsonObject();
    reqparam.addProperty("type", "arl");
    reqparam.addProperty("action", "remove");
    reqparam.addProperty("domain", "staging");
    reqparam.addProperty("objects", s);
    return reqparam;

}
}

La valeur de requestJson.toString est:

{"type": "arl", "action": "remove", "domain": "mise en scène", "objets": "http://www.abc.com"}


65
2018-03-21 18:11


origine


Réponses:


Je ne suis pas sûr de la raison mais en supprimant des lignes charset=utf8 de con.setRequestProperty("Content-Type", "application/json; charset=utf8") résolu le problème.


58
2018-03-25 19:02



Ajouter un type de contenu: application/json et accepter: application/json


26
2017-09-15 06:45



Ceci est dû au fait charset=utf8 devrait être sans espace après application/json. Cela fonctionnera très bien. Utilisez-le comme application/json;charset=utf-8


8
2018-05-17 15:34



Si vous faites une requête jquery ajax, n'oubliez pas d'ajouter

contentType:'application/json'

7
2017-09-13 16:49



J'envoyais "supprimer" la demande de repos et il a échoué avec 415. J'ai vu quel type de contenu mon serveur utilise pour frapper l'API. Dans mon cas, c'était "application / json" au lieu de "application / json; charset = utf8".

Alors demandez à votre développeur d'API Et en attendant essayez d'envoyer une requête avec content-type = "application / json" seulement.


0
2018-04-14 09:03



J'ai eu le même problème. Mon problème était un objet compliqué pour la sérialisation. Un attribut de mon objet était Map<Object1, List<Object2>>. J'ai changé cet attribut comme List<Object3> où Object3 contient Object1 et Object2 et tout fonctionne bien.


0
2018-01-12 22:12



Quelques fois, Metset Metset rompt le json lors de l'envoi de la requête. Mieux vaut ne pas utiliser charset = utf8 dans le type de requête.


0
2018-05-08 17:01