JAX-RS Jersey 读取带有 Content-Type“*”的实体
JAX-RS Jersey Read entity with Content-Type "*"
我正在使用 Jax-RS 向服务器发出请求,它只是 returns 一个单字字符串,并将该响应读入一个字符串变量。问题是我不知道如何使用响应,因为它的 Content-Type 是 *; charset=UTF-8
(我使用 Postman 验证了这一点)。 Jax-RS 很难解析这种 header。这是我的代码:
MultivaluedMap<String, String> formData = new MultivaluedHashMap<String, String>();
formData.add("username", username);
formData.add("target", "10");
Response response = target.request().accept(MediaType.APPLICATION_JSON_TYPE).post(Entity.form(formData));
String responseString = response.readEntity(String.class);
这个 POST 请求有效。我得到了一个我可以检查的实际响应。但是,当我尝试将此响应读入字符串(最后一行代码)时,抛出以下错误:
org.glassfish.jersey.message.internal.HeaderValueException: Unable to parse "Content-Type" header value: "*; charset=UTF-8" ! at
org.glassfish.jersey.message.internal.InboundMessageContext.exception(InboundMessageContext.java:338) ! at
org.glassfish.jersey.message.internal.InboundMessageContext.singleHeader(InboundMessageContext.java:333) ! at
org.glassfish.jersey.message.internal.InboundMessageContext.getMediaType(InboundMessageContext.java:446) ! at
org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:869)
如何让 Jax-RS 正确阅读这种 Content-Type?!?
我认为没有任何方法可以让 Jersey / Jax-RS 正确阅读那种 Content-Type。对于具有 Jax-RS 不喜欢的 Content-Type 的任何类型的响应,解决方案是简单地删除 header 并(如果需要)添加您自己的 Content-Type header 更适合 Response。在尝试读取 Response 实体之前执行此操作。这解决了我的问题:
response.getHeaders().remove("Content-Type");
response.getHeaders().add("Content-Type", "text/plain");
String responseString = response.readEntity(String.class);
我正在使用 Jax-RS 向服务器发出请求,它只是 returns 一个单字字符串,并将该响应读入一个字符串变量。问题是我不知道如何使用响应,因为它的 Content-Type 是 *; charset=UTF-8
(我使用 Postman 验证了这一点)。 Jax-RS 很难解析这种 header。这是我的代码:
MultivaluedMap<String, String> formData = new MultivaluedHashMap<String, String>();
formData.add("username", username);
formData.add("target", "10");
Response response = target.request().accept(MediaType.APPLICATION_JSON_TYPE).post(Entity.form(formData));
String responseString = response.readEntity(String.class);
这个 POST 请求有效。我得到了一个我可以检查的实际响应。但是,当我尝试将此响应读入字符串(最后一行代码)时,抛出以下错误:
org.glassfish.jersey.message.internal.HeaderValueException: Unable to parse "Content-Type" header value: "*; charset=UTF-8" ! at
org.glassfish.jersey.message.internal.InboundMessageContext.exception(InboundMessageContext.java:338) ! at
org.glassfish.jersey.message.internal.InboundMessageContext.singleHeader(InboundMessageContext.java:333) ! at
org.glassfish.jersey.message.internal.InboundMessageContext.getMediaType(InboundMessageContext.java:446) ! at
org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:869)
如何让 Jax-RS 正确阅读这种 Content-Type?!?
我认为没有任何方法可以让 Jersey / Jax-RS 正确阅读那种 Content-Type。对于具有 Jax-RS 不喜欢的 Content-Type 的任何类型的响应,解决方案是简单地删除 header 并(如果需要)添加您自己的 Content-Type header 更适合 Response。在尝试读取 Response 实体之前执行此操作。这解决了我的问题:
response.getHeaders().remove("Content-Type");
response.getHeaders().add("Content-Type", "text/plain");
String responseString = response.readEntity(String.class);