167

我正在使用 JSON 请求调用 REST 服务,它以HTTP 415 "Unsupported Media Type"错误响应。

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

如果我不在请求中包含 JSON 对象,它工作正常。我正在使用google-gson-2.2.4JSON 库。

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

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

这是我的代码:

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.example.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.example.com"}

4

19 回答 19

112

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

于 2014-03-25T19:02:34.417 回答
89

添加Content-Typeapplication/jsonAcceptapplication/json

于 2016-09-15T06:45:43.833 回答
17

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

contentType:'application/json'
于 2016-09-13T16:49:12.263 回答
14

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

于 2016-05-17T15:34:12.047 回答
5

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

dataType: "json",
contentType:'application/json'
于 2018-05-16T12:26:02.710 回答
5

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

  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(model),
于 2019-04-23T02:19:44.073 回答
5

HttpVerb 需要它的标题作为键值对的字典

headers = {'Content-Type': 'application/json', 'charset': 'utf-8'}
于 2021-02-10T16:51:36.913 回答
3

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

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

2. Content-Type - application/json

在此处输入图像描述

于 2021-07-19T18:30:14.670 回答
2

添加 HTTP 标头管理器并在其中添加您的 API 标头名称和值。例如,内容类型、接受等。这将解决您的问题。

于 2017-11-29T05:27:45.470 回答
1

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

于 2017-05-08T17:01:50.227 回答
1

我通过更新Request我的控制器接收的类来解决这个问题。

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

import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
于 2019-07-31T15:18:40.503 回答
1

我和邮递员有同样的问题。添加 Content-Type: application/json到标题解决了这个问题。

于 2021-10-07T20:30:58.173 回答
0

我正在发送“删除”休息请求,但它以 415 失败。我看到我的服务器使用什么内容类型来访问 api。就我而言,它是“application/json”而不是“application/json; charset=utf8”。

因此,请咨询您的 api 开发人员同时尝试仅使用 content-type= "application/json" 发送请求。

于 2016-04-14T09:03:22.123 回答
0

我遇到过同样的问题。我的问题是序列化的复杂对象。我的对象的一个​​属性是Map<Object1, List<Object2>>. 我改变了这个属性,比如List<Object3>where Object3containsObject1并且Object2一切正常。

于 2017-01-12T22:12:13.623 回答
0

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

于 2017-08-30T07:17:12.790 回答
0

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

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

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> messageConverters) {
        messageConverters.add(new MappingJackson2HttpMessageConverter());
        super.configureMessageConverters(messageConverters);
    }
}
于 2018-05-31T11:44:24.880 回答
0

原因可能是没有在您的调度程序 servlet xml 文件中添加“注释驱动”。也可能是由于没有在标题中添加为 application/json

于 2018-07-20T05:06:59.303 回答
0

415(不支持的媒体类型)状态代码表示源服务器拒绝为请求提供服务,因为目标资源上的有效负载是此方法不支持的格式。格式问题可能是由于请求指示的 Content-Type 或 Content-Encoding,或者是直接检查数据的结果。 文档

于 2019-10-13T19:54:48.963 回答
0

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

标头:{“内容类型”:“应用程序/json”,“接受”:“ / ”},

之后,您应该编写代码来对 JSON 正文进行编码。例如,

正文:jsonEncode({“用户名”:用户名,“密码”:密码})

于 2020-11-01T07:35:55.493 回答