在JAX-RS 2.0中使用包含内容类型的包机编码 - Jersey

时间:2014-08-06 13:32:07

标签: rest jersey jax-rs

我正在使用Jersey实现开发JAX-RS 2.0客户端。 REST API返回响应,内容类型为'application / json; UTF-8'

在客户端,Jersey无法识别此内容类型并引发错误,如

无法解析“Content-Type”标头值:“application / json; UTF-8”

 org.glassfish.jersey.message.internal.HeaderValueException: Unable to parse "Content-Type" header value: "application/json; UTF-8"
at org.glassfish.jersey.message.internal.InboundMessageContext.exception(InboundMessageContext.java:318)
at org.glassfish.jersey.message.internal.InboundMessageContext.singleHeader(InboundMessageContext.java:313)
at org.glassfish.jersey.message.internal.InboundMessageContext.getMediaType(InboundMessageContext.java:427)

如果内容类型为“application / json ”,则相同的代码可以处理响应。我试图搜索谷歌和一些帖子说泽西岛支持这样的字符编码和内容类型,但我没有发现它的工作。

以下是我正在尝试的代码。

Client clientSaml = ClientBuilder.newBuilder().sslContext(context)
            .hostnameVerifier(new HostnameVerifier() {
                @Override
                public boolean verify(String arg0, SSLSession arg1) {
                    // TODO Auto-generated method`enter code here` stub
                    return true;
                }
            }).build();

    clientSaml.register(new SAMLAuthenticator(token));
    clientSaml.register(new LoggingFilter());

    WebTarget target = clientSaml
            .target(URL_OF_API);

    Response resp = target.request(MediaType.APPLICATION_JSON).get();

    System.out.println(resp.getMediaType().toString());

之前是否有人遇到过这个问题?有什么可能解决这个问题? JAX-RS的其他实现是否支持它?

2 个答案:

答案 0 :(得分:1)

您忘记了charset=

Content-Type: application/json; charset=UTF-8

请参阅Section 14.17 Content-Type of HTTP 1.1

答案 1 :(得分:1)

我使用ClientResponseFilter

解决了这个问题

感谢Jersey and @FormParam not working when charset is specified in the Content-Type

中建议的提示