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

时间:2014-03-21 18:11:34

标签: 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;

}
}

requestJson.toString的值是:

{ “类型”: “ARL”, “动作”: “除去”, “域”: “分段”, “对象”: “http://www.abc.com”}

17 个答案:

答案 0 :(得分:70)

不确定原因,但从charset=utf8删除行con.setRequestProperty("Content-Type", "application/json; charset=utf8")解决了这个问题。

答案 1 :(得分:38)

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

答案 2 :(得分:8)

这是因为charset=utf8application/json之后应该没有空格。那会很好。像application/json;charset=utf-8

一样使用它

答案 3 :(得分:7)

如果您正在制作jquery ajax请求,请不要忘记添加

contentType:'application/json'

答案 4 :(得分:3)

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

headers = {'Content-Type': 'application/json', 'charset': 'utf-8'}

答案 5 :(得分:1)

Charset Metada有时会在发送请求时打破json。更好,不要在请求类型中使用charset = utf8。

答案 6 :(得分:1)

如果您使用的是AJAX jQuery请求,则必须申请。如果不是,它会引发你415错误。

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

答案 7 :(得分:0)

我发送"删除"休息请求,它失败了415.我看到了我的服务器用来命中api的内容类型。就我而言,它是" application / json"而不是" application / json;字符集= UTF8"

请咨询您的api开发人员并在此期间尝试使用content-type =" application / json"发送请求。仅

答案 8 :(得分:0)

在使用JSON请求处理REST服务时,我也遇到了此问题,并且它以HTTP 415“不支持的媒体类型”错误响应。 这些代码行将帮助您解决问题。

标题:{“ Content-Type”:“ application / json”,“ accept”:“ / ”},

之后,您应该编写代码来编码JSON主体。 例如,

body:jsonEncode({“ username”:用户名,“ password”:密码})

答案 9 :(得分:0)

  

415(不受支持的媒体类型)状态代码表示      原始服务器拒绝服务请求,因为有效负载      是目标资源上此方法不支持的格式。      格式问题可能是由于请求的指示      内容类型或内容编码,或检查      数据直接。   DOC

答案 10 :(得分:0)

我通过更新控制器收到的Request类来解决此问题。

从服务器端的Request类中删除了以下类级别注释。之后,我的客户没有得到415错误。

import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement

答案 11 :(得分:0)

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

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

答案 12 :(得分:0)

原因可能是未在调度程序servlet xml文件中添加“注释驱动”。而且可能是由于未在标头中添加为application / json

答案 13 :(得分:0)

在配置中手动添加MappingJackson2HttpMessageConverter解决了我的问题:

<DOCUMENT>
  <SECTION>
    <PARAGRAPH TRACK="0">
      <SENTENCE NAME="PRIMARY" COUNT="1">
        <TOKEN BEGIN="14" END="25" SENTENCE_BEGIN="0" SENTENCE_END="48"/>   
      </SENTENCE>
      <SENTENCE NAME="SECONDARY" COUNT="1">
        <TOKEN BEFORE_PRIMARY="YES" BEGIN="0" END="9" SENTENCE_BEGIN="0" SENTENCE_END="48" SAME_SENTENCE="YES"/>        
      </SENTENCE>
      <SENTENCE NAME="SECONDARY" COUNT="1">
        <TOKEN FURTHER_FROM_PRIMARY="YES" BEGIN="43" END="47" SENTENCE_BEGIN="0" SENTENCE_END="48" SAME_SENTENCE="YES"/>       
       </SENTENCE>
      <SENTENCE NAME="SECONDARY" COUNT="1">
        <TOKEN BEGIN="27" END="34" SENTENCE_BEGIN="0" SENTENCE_END="48" SAME_SENTENCE="YES"/>          
      </SENTENCE>
    </PARAGRAPH>
    <PARAGRAPH TRACK="1">
      <SENTENCE NAME="PRIMARY" COUNT="2">
        <TOKEN BEGIN="37" END="41" SENTENCE_BEGIN="0" SENTENCE_END="48"/> 
        <TOKEN BEGIN="37" END="41" SENTENCE_BEGIN="0" SENTENCE_END="48"/>
      </SENTENCE>
      <SENTENCE NAME="SECONDARY" COUNT="1">
        <TOKEN BEGIN="43" END="47" SENTENCE_BEGIN="0" SENTENCE_END="48"/> 
      </SENTENCE>
    </PARAGRAPH>
    <PARAGRAPH TRACK="2">
      <SENTENCE NAME="PRIMARY" COUNT="2">
        <TOKEN BEGIN="164" END="170" SENTENCE_BEGIN="135" SENTENCE_END="187"/>          
        <TOKEN BEGIN="164" END="170" SENTENCE_BEGIN="135" SENTENCE_END="187"/>         
      </SENTENCE>
      <SENTENCE NAME="SECONDARY" COUNT="1">
        <TOKEN BEGIN="172" END="175" SENTENCE_BEGIN="135" SENTENCE_END="187"/>          
      </SENTENCE>
    </PARAGRAPH>
    <PARAGRAPH TRACK="3">
      <SENTENCE NAME="PRIMARY" COUNT="4">
        <TOKEN BEGIN="93" END="97" SENTENCE_BEGIN="50" SENTENCE_END="133"/>   
        <TOKEN BEGIN="93" END="97" SENTENCE_BEGIN="50" SENTENCE_END="133"/>         
        <TOKEN BEGIN="135" END="139" SENTENCE_BEGIN="135" SENTENCE_END="187"/>
        <TOKEN BEGIN="135" END="139" SENTENCE_BEGIN="135" SENTENCE_END="187"/>
      </SENTENCE>
      <SENTENCE NAME="SECONDARY" COUNT="1">
        <TOKEN BEGIN="141" END="147" SENTENCE_BEGIN="135" SENTENCE_END="187" SAME_SENTENCE="YES"/>        
      </SENTENCE>
      <SENTENCE NAME="SECONDARY" COUNT="1">
        <TOKEN BEFORE_PRIMARY="YES" BEGIN="79" END="88" SENTENCE_BEGIN="50" SENTENCE_END="133" SAME_SENTENCE="YES"/>          
      </SENTENCE>
      <SENTENCE NAME="SECONDARY" COUNT="3">
        <TOKEN FURTHER_FROM_PRIMARY="YES" BEGIN="110" END="113" SENTENCE_BEGIN="50" SENTENCE_END="133" SAME_SENTENCE="YES"/>          
        <TOKEN FURTHER_FROM_PRIMARY="YES" BEGIN="129" END="132" SENTENCE_BEGIN="50" SENTENCE_END="133" SAME_SENTENCE="YES"/>          
        <TOKEN FURTHER_FROM_PRIMARY="YES" BEGIN="172" END="175" SENTENCE_BEGIN="135" SENTENCE_END="187" SAME_SENTENCE="YES"/>          
      </SENTENCE>
      <SENTENCE NAME="SECONDARY" COUNT="1">
        <TOKEN BEGIN="99" END="104" SENTENCE_BEGIN="50" SENTENCE_END="133" SAME_SENTENCE="YES"/> 
        <TOKEN FURTHER_FROM_PRIMARY="YES" BEGIN="153" END="158" SENTENCE_BEGIN="135" SENTENCE_END="187" SAME_SENTENCE="YES"/>   
      </SENTENCE>
    </PARAGRAPH>
    <PARAGRAPH TRACK="4">
      <SENTENCE NAME="PRIMARY" COUNT="1">
        <TOKEN BEGIN="119" END="127" SENTENCE_BEGIN="50" SENTENCE_END="133"/>
        </SENTENCE>
      <SENTENCE NAME="SECONDARY" COUNT="1">
        <TOKEN BEGIN="129" END="132" SENTENCE_BEGIN="50" SENTENCE_END="133"/>       
      </SENTENCE>
    </PARAGRAPH>
    <PARAGRAPH TRACK="5">
      <SENTENCE NAME="PRIMARY" COUNT="1">
        <TOKEN BEGIN="50" END="58" SENTENCE_BEGIN="50" SENTENCE_END="133"/>          
      </SENTENCE>
      <SENTENCE NAME="SECONDARY" COUNT="1">
        <TOKEN BEGIN="60" END="66" SENTENCE_BEGIN="50" SENTENCE_END="133"/>   
       </SENTENCE>
    </PARAGRAPH>
  </SECTION>
</DOCUMENT>

答案 14 :(得分:0)

我知道现在为他的问题帮助OP已经太晚了,但对于刚刚遇到这个问题的所有人来说, 我通过删除构造函数来解决这个问题,该构造函数包含我的类的参数,该参数用于保存json数据。

答案 15 :(得分:0)

我有同样的问题。我的问题是序列化的复杂对象。我的对象的一个​​属性是Map<Object1, List<Object2>>。 我更改了List<Object3>这个属性,其中Object3包含Object1Object2,一切正常。

答案 16 :(得分:-1)

如果您是通过 Postman 发出发布请求,请确保您选择了这 2 个选项

1. JSON 应该被选择 enter image description here

2.内容类型 - 应用程序/json

enter image description here