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