加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

Web服务 – 使用JAX-RS Jersey 2.2的Content-Type和Accept标头的

发布时间:2020-12-14 18:46:54 所属栏目:资源 来源:网络整理
导读:我尝试访问一个开放的数据Web服务,给我的交通信息.文档说,请求必须是GET,需要包含Accept:application / json和Content-Type:application / json.我不明白为什么他们需要Content-Type,但是可以: 我试图用Accept:Header检索数据,但是我总是得到一个415不支
我尝试访问一个开放的数据Web服务,给我的交通信息.文档说,请求必须是GET,需要包含Accept:application / json和Content-Type:application / json.我不明白为什么他们需要Content-Type,但是可以:

我试图用Accept:Header检索数据,但是我总是得到一个415不支持的媒体类型.现在我正在尝试这样(但我不知道我是否真的正确设置两个头):

String entity = ClientBuilder.newClient().target(liveDataURI)
    .path(liveDataPath)
    .request(MediaType.APPLICATION_JSON)
    .accept(MediaType.APPLICATION_JSON)
    .get(String.class);

正如你所看到的,我使用的是泽西2.2,而且我仍然得到一个415不支持的媒体类型.

编辑

所以我得到它的工作,但我不明白为什么.不接受(MediaType.APPLICATION_JSON)和标题(“Content-type”,“application / json”)一样吗?

String responseEntity = ClientBuilder.newClient()
    .target(liveDataURI)
    .path(liveDataPath)
    .request(MediaType.APPLICATION_JSON)
    .header("Content-type","application/json")
    .get(String.class);

解决方法

Accept标头告诉服务器您的客户端在响应中需要什么. Content-Type标头告诉服务器客户端在请求中发送的内容.所以两者不一样.

如果服务器只接受application / json,则必须发送一个指定请求内容的请求:

Content-Type: application/json

这就是为什么你编辑的代码工作.

编辑

在你的第一个代码中你使用WebTarget.request(MediaType... acceptedResponseTypes).这个方法的参数

define the accepted response media types.

您正在使用Innvocation.Builder.accept(MediaType... mediaTypes)对此方法调用的结果.但是,accept()不会添加新的标题,在第一个代码中不必要.

您从不指定请求的内容类型.由于服务器需要一个Content-Type标头,所以它响应415.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读