gpt4 book ai didi

java - 使用 ClientResponse 发布时 Jersey 客户端 MessageBodyProviderNotFoundException

转载 作者:行者123 更新时间:2023-11-29 04:22:47 24 4
gpt4 key购买 nike

我正在尝试使用 Jersey 客户端调用 REST 服务(不使用 Jersey/JAX-RS)。以下代码可以很好地发布我的表单数据并接收响应:

    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() 的第二个参数。不使用第二个参数时,返回类型为Response。然后您可以使用 Response#readEntity()

读取/反序列化实体
Response response = target
.request(MediaType.TEXT_PLAIN)
.post(Entity.form(form));

String data = response.readEntity(String.class);

关于java - 使用 ClientResponse 发布时 Jersey 客户端 MessageBodyProviderNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48054073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com