首页 文章

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

提问于
浏览
0

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

为什么我得到这个例外?

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);
    

相关问题