使用ClientResponse发布时,Jersey客户端MessageBodyProviderNotFoundException
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ClientResponse发布时,Jersey客户端MessageBodyProviderNotFoundException相关的知识,希望对你有一定的参考价值。
我正在尝试使用Jersey客户端来调用REST服务(它不使用Jersey / JAX-RS)。以下代码可以正常POST我的表单数据并收到响应:
Form form = new Form();
form.param("email", email);
form.param("password", password);
String clientResponse =
target.request(MediaType.TEXT_PLAIN)
.post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE),
String.class);
代码运行正常,clientResponse变量包含来自服务器的纯文本响应。
现在,我需要检查服务器返回的状态代码。据我所知,我需要将响应检索为ClientResponse对象而不是String。所以,我将我的代码更改为:
Form form = new Form();
form.param("email", email);
form.param("password", password);
ClientResponse clientResponse =
target.request(MediaType.TEXT_PLAIN)
.post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE),
ClientResponse.class);
当我运行这个新代码时,我得到以下异常:
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:找不到媒体类型= text / plain的MessageBodyReader,类型= class org.glassfish.jersey.client.ClientResponse,genericType = class org.glassfish.jersey.client.ClientResponse。
为什么我得到这个例外?
你不使用ClientResponse
。你应该使用Response
。当您希望响应实体自动反序列化时,您只需要使用.post()
的第二个参数。如果不使用第二个参数,则返回类型为Response
。然后,您可以使用Response#readEntity()
读取/反序列化实体
Response response = target
.request(MediaType.TEXT_PLAIN)
.post(Entity.form(form));
String data = response.readEntity(String.class);
以上是关于使用ClientResponse发布时,Jersey客户端MessageBodyProviderNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章
泛型类型的 Jersey ClientResponse.getEntity
如何从 Mono<ClientResponse> 获取正文?
aiohttp 异步http请求-11.ClientResponse 获取响应headers 和cookies