Http 415 Errore di tipo di supporto non supportato con JSON

Sto chiamando il servizio REST con richiesta JSON e restituisce l’errore “Tipo di supporto non supportato” Http 415.

Il tipo di contenuto della richiesta è impostato su (“Content-Type”, “application / json; charset = utf8″).

Funziona bene se non includo l’object Json nella richiesta. Sto usando la libreria google-gson-2.2.4 per JSON.

Ho provato a utilizzare un paio di librerie diverse ma non ha fatto alcuna differenza.

Qualcuno può aiutarmi per risolvere questo?

Ecco il mio codice:

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 MalformsdURLException { 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; } } 

Il valore di requestJson.toString è:

{“type”: “arl”, “action”: “remove”, “domain”: “staging”, “objects”: ” http://www.abc.com “}

Non sono sicuro del motivo, ma Rimozione delle righe charset=utf8 da con.setRequestProperty("Content-Type", "application/json; charset=utf8") risolto il problema.

Aggiungi Content-Type: application/json e Accept: application/json

Questo perché charset=utf8 dovrebbe essere senza spazio dopo l’ application/json . Funzionerà bene. Usalo come application/json;charset=utf-8

Se stai facendo jQuery ajax request, non dimenticare di aggiungere

 contentType:'application/json' 

Aggiungi il gestore di intestazione HTTP e aggiungi i nomi e i valori dell’intestazione dell’API. es. Content-type, Accept, ecc. Questo risolverà il tuo problema.

Se stai usando AJAX jQuery Richiesta questo è un must da applicare. Altrimenti ti lancerà l’errore 415 .

 dataType: "json", contentType:'application/json' 

Stavo mandando “elimina” la richiesta di rest e non funzionava con 415. Ho visto quale tipo di contenuto utilizzava il mio server per colpire l’api. Nel mio caso, era “application / json” invece di “application / json; charset = utf8”.

Quindi chiedi al tuo sviluppatore di API e nel frattempo prova a inviare la richiesta con content-type = “application / json”.

Ho avuto lo stesso problema. Il mio problema era un object complicato per la serializzazione. Un attributo del mio object era Map> . Ho cambiato questo attributo come List dove Object3 contiene Object1 e Object2 e tutto funziona Object2 .

Alcune volte Charset Metada rompe il json mentre invia la richiesta. Meglio, non usare charset = utf8 nel tipo di richiesta.

So che è troppo tardi per aiutare l’OP con il suo problema, ma per tutti quelli che hanno appena riscontrato questo problema, ho risolto questo problema rimuovendo il costruttore con i parametri della mia class che doveva contenere i dati JSON.

Aggiungi MappingJackson2HttpMessageConverter manualmente nella configurazione risolto il problema per me:

 @EnableWebMvc @Configuration @ComponentScan public class RestConfiguration extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List> messageConverters) { messageConverters.add(new MappingJackson2HttpMessageConverter()); super.configureMessageConverters(messageConverters); } } 

Il motivo può non essere l’aggiunta di “annotation-driven” nel file xml del servlet dispatcher. e potrebbe anche essere dovuto a non aggiungere come applicazione / json nelle intestazioni