使用 ClientResponse 发布时 Jersey 客户端 MessageBodyProviderNotFoundException
Jersey client MessageBodyProviderNotFoundException when posting using ClientResponse
我正在尝试使用 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 对象而不是字符串。所以,我将代码更改为:
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: MessageBodyReader not found for media type=text/plain, type=class org.glassfish.jersey.client.ClientResponse, genericType=class org.glassfish.jersey.client.ClientResponse.
为什么我会收到此异常?
您没有使用 ClientResponse
。你应该使用 Response
。而当你想让响应实体自动反序列化时,只需要使用.post()
的第二个参数即可。不使用第二个参数时,return类型为Response
。然后你可以用 Response#readEntity()
读取 read/deserialize 实体
Response response = target
.request(MediaType.TEXT_PLAIN)
.post(Entity.form(form));
String data = response.readEntity(String.class);
我正在尝试使用 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 对象而不是字符串。所以,我将代码更改为:
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: MessageBodyReader not found for media type=text/plain, type=class org.glassfish.jersey.client.ClientResponse, genericType=class org.glassfish.jersey.client.ClientResponse.
为什么我会收到此异常?
您没有使用 ClientResponse
。你应该使用 Response
。而当你想让响应实体自动反序列化时,只需要使用.post()
的第二个参数即可。不使用第二个参数时,return类型为Response
。然后你可以用 Response#readEntity()
Response response = target
.request(MediaType.TEXT_PLAIN)
.post(Entity.form(form));
String data = response.readEntity(String.class);