内容类型为“ *”的JAX-RS Jersey读取实体

我正在使用Jax-RS向服务器发出请求,该服务器仅返回一个单词String,并将该响应读入String变量。问题是我不知道如何使用响应,因为它的Content-Type是*; charset=UTF-8(我使用Postman对此进行了验证)。Jax-RS很难解析此类标头。这是我的代码:


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请求有效。我得到了可以检查的实际响应。但是,当我尝试将此响应读取为String(代码的最后一行)时,会引发以下错误:


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?!?


MMMHUHU
浏览 185回答 1
1回答

神不在的星期二

我认为没有任何方法可以使Jersey / Jax-RS正确读取这种Content-Type。对于具有Jax-RS不喜欢的Content-Type的任何类型的Response的解决方案是简单地删除标头,并(如果需要)添加您自己的Content-Type标头,该标头更适合于Response。在尝试读取Response实体之前,请执行此操作。这解决了我的问题:response.getHeaders().remove("Content-Type");response.getHeaders().add("Content-Type", "text/plain");String responseString = response.readEntity(String.class);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java