Http 415不支持的媒体类型错误与JSON

use*_*794 96 java json http-status-code-415

我正在使用JSON请求调用REST服务,它给出了Http 415"不支持的媒体类型"错误.

请求内容类型设置为("Content-Type","application/json; charset = utf8").

如果我在请求中不包含Json对象,它可以正常工作.我正在为json使用google-gson-2.2.4库.

我尝试使用几个不同的库,但它没有任何区别.

有人可以帮我解决这个问题吗?

这是我的代码:

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;

}
}
Run Code Online (Sandbox Code Playgroud)

requestJson.toString的值是:

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

use*_*794 73

不知道的原因,但删除线charset=utf8,从 con.setRequestProperty("Content-Type", "application/json; charset=utf8")解决问题.

  • 因为`charset = utf8`不是有效的字符集指定.正确的版本是`charset = utf-8`.破折号很重要.有效字符集指定列表由IANA RFC2879管理:http://www.iana.org/assignments/character-sets/character-sets.xhtml (14认同)

Par*_*nki 40

添加内容类型:application/json并接受:application/json

  • 如果您使用 **Postman** 进行测试,请尝试将此部分添加到 **Headers**: Content-Type: application/json (4认同)

Mah*_*asr 12

HttpVerb 需要其标头作为键值对的字典

headers = {'Content-Type': 'application/json', 'charset': 'utf-8'}
Run Code Online (Sandbox Code Playgroud)


小智 9

这是因为之后charset=utf8应该没有空格application/json.那会很好.像它一样使用它application/json;charset=utf-8

  • 这是不正确的;允许使用空格,但应忽略该空格;请参阅 https://tools.ietf.org/html/rfc2046 。 (2认同)

ana*_*ish 8

如果您要通过发布请求,Postman请确保您选择了这两个选项

1. 应选择 JSON(application/json)在此输入图像描述

2.内容类型-application/json

在此输入图像描述


kar*_*hik 7

如果你正在制作jquery ajax请求,别忘了添加

contentType:'application/json'
Run Code Online (Sandbox Code Playgroud)


Dul*_*sta 5

如果您正在使用AJAX jQuery请求,这是必须申请的。如果不是,它会抛出你的415错误。

dataType: "json",
contentType:'application/json'
Run Code Online (Sandbox Code Playgroud)


Nal*_*ran 5

如果您在 React RSAA 中间件或类似软件中获得此信息,请添加标头:

  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(model),
Run Code Online (Sandbox Code Playgroud)