java - type - Http 415 Error de tipo de medio incompatible con JSON
http 415 tipo de medio no soportado (11)
Agregar Content-Type: application/json
y Accept: application/json
Llamo al servicio REST con solicitud JSON y da error Http 415 "Tipo de soporte no admitido".
El tipo de contenido de solicitud se establece en ("Content-Type", "application / json; charset = utf8").
Funciona bien si no incluyo el objeto Json en la solicitud. Estoy usando la biblioteca google-gson-2.2.4 para json.
Traté de usar un par de bibliotecas diferentes, pero no hizo ninguna diferencia.
¿Alguien puede ayudarme a resolver esto?
Aquí está mi 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;
}
}
El valor de requestJson.toString es:
{"type": "arl", "action": "remove", "domain": "staging", "objects": " http://www.abc.com "}
Agregar MappingJackson2HttpMessageConverter manualmente en la configuración resolvió el problema para mí:
@EnableWebMvc
@Configuration
@ComponentScan
public class RestConfiguration extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> messageConverters) {
messageConverters.add(new MappingJackson2HttpMessageConverter());
super.configureMessageConverters(messageConverters);
}
}
Agregue el administrador de encabezado HTTP y agregue los nombres y valores de encabezado de su API. por ejemplo, tipo de contenido, aceptar, etc. Eso resolverá su problema.
Algunas veces Charset Metada rompe el JSON mientras envía la solicitud. Mejor, no use charset = utf8 en el tipo de solicitud.
Estaba enviando una solicitud de reposo "borrar" y falló con 415. Vi qué tipo de contenido usa mi servidor para api. En mi caso, fue "application / json" en lugar de "application / json; charset = utf8".
Así que pregúntale a tu desarrollador de API Y, mientras tanto, intenta enviar una solicitud con content-type = "application / json" solamente.
Esto es porque charset=utf8
debería estar sin espacio después de la application/json
. Eso funcionará bien. Úselo como application/json;charset=utf-8
No estoy seguro del motivo, pero la eliminación de las líneas charset=utf8
de con.setRequestProperty("Content-Type", "application/json; charset=utf8")
resolvió el problema.
Sé que es demasiado tarde para ayudar al OP con su problema, pero para todos los que estamos enfrentando este problema, resolvimos este problema eliminando el constructor con los parámetros de mi Clase, que estaba destinado a contener los datos json.
Si está haciendo una solicitud jquery ajax, no olvide agregar
contentType:''application/json''
Si está utilizando AJAX
jQuery
Request, esta es una obligación para solicitar. Si no, te arrojará 415
Error.
dataType: "json",
contentType:''application/json''
Tuve el mismo problema. Mi problema era un objeto complicado para la serialización. Un atributo de mi objeto era Map<Object1, List<Object2>>
. Cambié este atributo como List<Object3>
donde Object3
contiene Object1
y Object2
y todo funciona bien.