当前位置: 首页 > 知识库问答 >
问题:

如何使用ApacheHttpClient 4.5发送带有JSON参数的帖子。获取415不支持的媒体类型

丌官瀚
2023-03-14

我正试图向我的服务器发送一个POST请求(使用ApacheHttpClient 4.5),其中包含一组JSON参数。我已经回答了一些这样的问题,但我遇到了一些问题。

当我使用javascript控制台发送请求时,它工作正常!这样地:

//Using JS console, I send a POST request and it works.
$.post('/createConfigData', {
    "tailSign": "A7ALE",
    "active": "Y"
});
//Get back 201

当我使用Apache HTTPClient 4.5尝试执行与上述相同的操作时,我返回415个不受支持的媒体类型:

HttpPost httppost = new HttpPost('/createConfigData');
String jsondata = "{\"tailSign\": \"A7ALE\",\"active\": \"Y\"}";

StringEntity jsonparam = new StringEntity(jsondata);
jsonparam.setContentType("application/json;charset=utf-8");
jsonparam.setChunked(true);

httppost.addHeader("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
httppost.setEntity(jsonparam);

httpresponse = httpclient.execute(target, httppost);

我从工作请求中得到的数据是:

  • 请求报头:
    • 主持人:mysite.com
    • 用户代理:Mozilla/5.0(X11; Ubuntu;Linuxx86_64; rv: 25.0)Gecko/20100101 Firefox/25.0
    • 接受:"*/*"
    • Accept-Language:"en-US, en; q=0.5"
    • 接受-编码:gzip,收缩
    • Content-Type:"应用程序/x-ww-form-urlencoded;字符集=UTF-8"
    • 裁判:mysite.com/index.html
    • 内容-长度:"288"
    • Cookie:JSESSIONID=...
    • 代理-授权:基本...
    • 连接:保持-活着
    • Pragma:无缓存
    • 缓存控制:无缓存
    • 年龄:“0”
    • 连接:“保持活动状态”
    • 内容类型:“application/json;charset=UTF-8”
    • 日期:“2016年10月19日星期三17:57:34 GMT”
    • 服务器:“Apache Coyote/1.1”
    • 传输编码:“分块”

    我对在哪里设置内容类型有点困惑,无论是实体还是http://www.

    =======================

    将httpost的内容类型设置为json会给我带来400

    HttpPost httppost = new HttpPost('/createConfigData');
    String jsondata = "{\"tailSign\": \"A7ALE\",\"active\": \"Y\"}";
    
    StringEntity jsonparam = new StringEntity(jsondata);
    jsonparam.setChunked(true);
    
    httppost.addHeader("content-type", "application/json;charset=UTF-8");
    httppost.setEntity(jsonparam);
    
    httpresponse = httpclient.execute(target, httppost);
    

    将httpost的内容类型设置为x-www-form-urlencoded会给我带来415

    HttpPost httppost = new HttpPost('/createConfigData');
    String jsondata = "{\"tailSign\": \"A7ALE\",\"active\": \"Y\"}";
    
    StringEntity jsonparam = new StringEntity(jsondata);
    jsonparam.setChunked(true);
    
    httppost.addHeader("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
    httppost.setEntity(jsonparam);
    
    httpresponse = httpclient.execute(target, httppost);
    

    我也试着添加了这一行:

    httppost.addHeader("Accept", "*/*");
    

    ==================

    使用wireshark,我发现400个错误请求中有一条错误消息!只是我的JSON不正确。

    HTTP/1.1 400 Bad Request
    Server: Apache-Coyote/1.1
    Content-Type: application/json;charset=UTF-8
    Transfer-Encoding: chunked
    Date: Wed, 19 Oct 2016 21:33:25 GMT
    Proxy-Connection: Keep-Alive
    Connection: Keep-Alive
    
    {"code":400,"message":"Field ConfigName is Null, Invalid Value for Seat Count, Missing counts for DSU, ICMT, SVDU, TPMU, Login user details not found, Please enter valid lruData","fleetData":{"airlineData":null,"dimAircraftJson":null,"configData":null}}
    

共有1个答案

涂飞航
2023-03-14

由于您已将内容类型头覆盖到application/x-www-form-urlencoded,因此您将获得415个不受支持的媒体类型;字符集=UTF-8。只需将其更改为:

HttpPost httppost = new HttpPost('/createConfigData');
String jsondata = "{\"tailSign\": \"A7ALE\",\"active\": \"Y\"}";
StringEntity jsonparam = new StringEntity(jsondata);
jsonparam.setChunked(true);

httppost.addHeader("content-type", "application/json;charset=UTF-8");
httppost.setEntity(jsonparam);

httpresponse = httpclient.execute(target, httppost);
 类似资料:
  • 我必须做的是,我必须在给定的URL中发布JSON数据,其中JSON看起来像 和我的功能 当我张贴它的时候;我得到一个错误 “远程服务器返回错误:(415)不支持的媒体类型。” 有人知道吗;我错在哪里?

  • JS代码如下所示。 与URL映射的Spring控制器中的方法如下所示。 服务器按照问题的意思进行响应, 整个文件如下所示。 当我删除一个方法参数,并简单地使用来接受请求参数时,它就起作用了。

  • 我在泽西岛有一个Rest服务,我正在使用邮递员实现 我在邮递员中得到以下错误:

  • 问题内容: 自数小时以来,我一直在尝试纠正http错误,但它仍显示不支持的页面。我在邮递员中添加标题。 这是我的Java代码 这是我的档案 问题答案: 通过和如何在响应流和请求流之间对对象进行序列化和反序列化。 将会发生的是,将从提供者的注册表中进行搜索,以查找可以处理的媒体类型。如果找不到,则Jersey无法处理该请求,并将发送415不支持的媒体类型。通常,你还应该在服务器端记录一个异常。不知道

  • 我已经创建了一个示例web服务来进行post调用。 我使用的是Jersey JAX-RS和Maven。

  • 问题内容: 我正在使用JSON请求调用REST服务,并且它以错误响应。 请求内容类型设置为。 如果我在请求中不包含JSON对象,则效果很好。我正在使用JSON库。 我尝试使用几个不同的库,但这没什么区别。 有人可以帮我解决这个问题吗? 这是我的代码: 的值为: 问题答案: 不确定原因,但是从中 删除行解决了该问题。