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

前端之家收集整理的这篇文章主要介绍了Web服务 – 使用JAX-RS Jersey 2.2的Content-Type和Accept标头的GET请求前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试访问一个开放的数据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.

原文链接:https://www.f2er.com/html/225231.html

猜你在找的HTML相关文章