Http 415 Erro de tipo de mídia não suportado com JSON

Eu estou chamando o serviço REST com pedido JSON e dá Http 415 “Unsupported Media Type” erro.

Request content type é definido como (“Content-Type”, “application / json; charset = utf8″).

Ele funciona bem se eu não include o object Json na solicitação. Eu estou usando a biblioteca google-gson-2.2.4 para json.

Eu tentei usar algumas bibliotecas diferentes, mas isso não fez diferença.

Alguém por favor pode me ajudar a resolver isso?

Aqui está o meu código:

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

O valor de requestJson.toString é:

{“type”: “arl”, “action”: “remover”, “domínio”: “teste”, “objects”: ” http://www.abc.com “}

Não tenho certeza sobre o motivo, mas removendo linhas charset=utf8 de con.setRequestProperty("Content-Type", "application/json; charset=utf8") resolveu o problema.

Adicione o tipo de conteúdo: application/json e aceite: application/json

Isso ocorre porque charset=utf8 deve estar sem espaço após o application/json . Isso vai funcionar bem. Use-o como application/json;charset=utf-8

Se você está fazendo o pedido do jquery ajax, não se esqueça de adicionar

 contentType:'application/json' 

Adicione o gerenciador de header HTTP e inclua os nomes e valores de header da API. Por exemplo, tipo de conteúdo, aceitar, etc. Isso resolverá seu problema.

Se você estiver usando o AJAX jQuery Request, esta é uma obrigação para se candidatar. Se não, você irá lançar-lhe 415 Erro.

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

Eu estava enviando “excluir” pedido de descanso e falhou com 415. Eu vi o tipo de conteúdo que meu servidor usa para acertar a API. No meu caso, foi “application / json” em vez de “application / json; charset = utf8”.

Então, pergunte ao seu desenvolvedor de API e enquanto isso tente enviar o pedido apenas com content-type = “application / json”.

Eu tive o mesmo problema. Meu problema era object complicado para serialização. Um atributo do meu object foi Map> . Eu mudei este atributo como List onde Object3 contém Object3 e Object2 e tudo funciona bem.

Algumas vezes Charset Metada quebra o json enquanto envia o pedido. Melhor, não use charset = utf8 no tipo de solicitação.

Eu sei que é tarde demais para ajudar o OP com o seu problema, mas para todos nós que estamos apenas encontrando este problema, eu tinha resolvido esse problema removendo o construtor com parâmetros da minha class que deveria conter os dados json.

Adicione MappingJackson2HttpMessageConverter manualmente na configuração resolveu o problema para mim:

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

O motivo pode não estar adicionando “orientado por anotação” no arquivo xml do servlet do dispatcher. e também pode ser devido a não adicionar como aplicação / json nos headers