我正在尝试使用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);