Http 415 Unsupported Media type d'erreur avec JSON
Je suis l'appel de service REST JSON demande et il donne Http 415 "Unsupported Media Type" d'erreur.
Demande type de contenu est défini à l' ("Content-Type", "application/json; charset=utf8").
Il fonctionne très bien si je n'inclus pas l'objet Json dans la demande. Je suis en utilisant google-gson-2.2.4 bibliothèque json.
J'ai essayé en utilisant un couple de différentes bibliothèques, mais il ne fait aucune différence.
Quelqu'un peut-il m'aider à 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;
}
}
Valeur de requestJson.toString est :
{"type":"arl","action":"supprimer","domaine":"mise en scène","objets":"http://www.abc.com"}
- Veuillez mettre à jour votre question avec la valeur de
requestJson.toString()
- La valeur de requestJson.toString est : {"type":"arl","action":"supprimer","domaine":"mise en scène","objets":"abc.com"}
- Avez-vous écrit la partie serveur? Si vous faites la même demande avec Facteur (les extensions de Chrome, Google), ça fonctionne? Peut-être que le serveur n'accepte pas le JSON type de contenu pour une raison quelconque?
- Oui j'ai testé que l'utilisation de soapUI. J'ai envoyé exactement la même demande, y compris json et a obtenu des succès de la réponse du serveur.
- depuis le 14 mars 2017, Facteur chrome extension est obsolète. Ils se sont déplacés à l'application native. Voici leur blog: http://blog.getpostman.com/2017/03/14/going-native/
Vous devez vous connecter pour publier un commentaire.
Pas sûr de la raison, mais de supprimer les lignes
charset=utf8
decon.setRequestProperty("Content-Type", "application/json; charset=utf8")
résolu le problème.charset
à régler dans le Type de Contenu. Ma conjecture est qu'il vérifie si la chaîne"application/json; charset=utf-8" == "application/json"
. Cela étant dit, JSON doit être en utf-8 il est donc parfaitement valide pour laisser de côté le jeu de caractères.charset=utf8
n'est pas un caractère valide set désignation. La version correcte seraitcharset=utf-8
. Le tableau de bord est important. La liste des caractères valides ensemble des désignations est géré par l'IANA RFC2879: iana.org/assignments/character-sets/character-sets.xhtmlAjouter du Contenu-Type:
application/json
et d'Accepter:application/json
C'est parce que
charset=utf8
devrait être sans espace aprèsapplication/json
. Qui fonctionne très bien. L'utiliser commeapplication/json;charset=utf-8
Si vous êtes à la prise de jquery ajax demande, n'oubliez pas d'ajouter
Ajouter l'en-tête HTTP de gestionnaire et d'ajouter dans votre API de noms d'en-tête et de valeurs.
par exemple, le type de Contenu, d'Accepter, de etc. Que de résoudre votre problème.
Quelques fois Charset Metada rompt le json lors de l'envoi de la demande. Mieux, de ne pas utiliser charset=utf8 dans le type de la requête.
Si vous utilisez
AJAX
jQuery
Demande, c'est un must à s'appliquer. Si non, il va vous jeter415
Erreur.J'ai été l'envoi de "supprimer" le repos de la demande et il a échoué avec 415. J'ai vu ce type de contenu de mon serveur utilise pour frapper l'api. Dans mon cas, C'est "application/json" au lieu de "application/json; charset=utf8".
Donc demander à partir de votre api de développeur Et en attendant, essayez d'envoyer la demande avec content-type= "application/json" seulement.
J'ai eu le même problème. Mon problème a été compliqué pour la sérialisation de l'objet. Un attribut de mon objet était
Map<Object1, List<Object2>>
.J'ai changé cet attribut comme
List<Object3>
oùObject3
contientObject1
etObject2
et tout fonctionne bien.Je sais que c'est trop tard pour aider les OP à son problème, mais pour nous tous qui est tout simplement rencontrer ce problème,
J'avais résolu ce problème en supprimant le constructeur avec les paramètres de ma Classe qui était destiné à contenir des données json.
Ajouter MappingJackson2HttpMessageConverter manuellement dans la configuration résolu le problème pour moi :
La raison peut être de ne pas ajouter "annotation-driven" dans votre répartiteur servlet fichier xml. et aussi, il peut être en raison de ne pas ajouter que l'application/json dans les en-têtes
Si vous obtenez ce à Réagir RSAA middleware ou similaire,
Ajouter les en-têtes: