使用ClientResponse发布时,Jersey客户端MessageBodyProviderNotFoundException

问题描述 投票:0回答:1

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

为什么我得到这个例外?

java rest jersey jersey-client
1个回答
2
投票

你不使用ClientResponse。你应该使用Response。当您希望响应实体自动反序列化时,您只需要使用.post()的第二个参数。如果不使用第二个参数,则返回类型为Response。然后,您可以使用Response#readEntity()读取/反序列化实体

Response response = target
    .request(MediaType.TEXT_PLAIN)
    .post(Entity.form(form));

String data = response.readEntity(String.class);
© www.soinside.com 2019 - 2024. All rights reserved.