Ошибка неподдерживаемого типа носителя Http 415 с JSON


Я вызываю службу REST с запросом JSON, и это дает Http 415 "неподдерживаемый тип носителя" ошибка.

Request content type имеет значение ("Content-Type", "application/json; charset=utf8").

он отлично работает, если я не включаю объект Json в запрос. Я использую библиотеку google-gson-2.2.4 для json.

Я пробовал использовать несколько разных библиотек, но это не имело никакого значения.

может кто-нибудь пожалуйста, помогите мне решить это?

вот мой код:

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;

}
}

значение requestJson.toString является :

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

12 68

12 ответов:

не уверен в причине, но удаление строк charset=utf8 с con.setRequestProperty("Content-Type", "application/json; charset=utf8") решен вопрос.

Добавить Тип Контента:application/json и принять: application/json

Это так charset=utf8 должно быть без пробела после application/json. Это будет прекрасно работать. Используйте его как application/json;charset=utf-8

Если вы делаете запрос jQuery ajax, не забудьте добавить

contentType:'application/json'

добавьте диспетчер заголовков HTTP и добавьте в него имена и значения заголовков вашего API. например, Content-type, Accept и т. д. Это решит вашу проблему.

если вы используете AJAXjQuery запрос это необходимо применить. Если нет, то он вас бросит 415 ошибка.

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

Я отправлял запрос" удалить " rest, и он не удался с 415. Я видел, какой тип контента мой сервер использует для попадания в api. В моем случае это было "application/json" вместо "application / json; charset=utf8".

поэтому спросите у своего разработчика api и тем временем попробуйте отправить запрос только с content-type= "application/json".

у меня была та же проблема. Моя проблема была сложным объектом для сериализации. Один атрибут моего объекта был Map<Object1, List<Object2>>. Я изменил этот атрибут как List<Object3> здесь Object3 содержит Object1 и Object2 и все работает нормально.

несколько раз кодировка Metada ломает json при отправке запроса. Лучше не использовать charset=utf8 в типе запроса.

Я знаю, что это слишком поздно, чтобы помочь ОП с его проблемой, но для всех нас, кто только сталкивается с этой проблемой, Я решил эту проблему, удалив конструктор с параметрами моего класса, который должен был содержать данные json.

добавить MappingJackson2HttpMessageConverter вручную в конфигурации решил проблему для меня:

@EnableWebMvc
@Configuration
@ComponentScan
public class RestConfiguration extends WebMvcConfigurerAdapter {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> messageConverters) {
        messageConverters.add(new MappingJackson2HttpMessageConverter());
        super.configureMessageConverters(messageConverters);
    }
}

причиной может быть не добавление "аннотаций" в xml-файл сервлета диспетчера. а также это может быть связано с не добавлением в качестве приложения/json в заголовках