获取Jersey客户端发送的PUT请求状态

5

我有一个在服务器端使用Jersey定义的Web服务,就像这样:

@POST
@Consumes(MediaType.APPLICATION_XML)
@Path("/foo")
public Response bar(List<Foo> listFoo) {    
 try {
        //save the resource
        } catch (Exception e) {
        log.error("Error saving", e);
        return Response.status(Status.INTERNAL_SERVER_ERROR).build();
    }
    return Response.status(Status.OK).build();
}

我想在我的Jersey客户端中获取服务器状态,代码如下:

Response response = ws.type(MediaType.APPLICATION_XML).post(Response.class,list);

但是我遇到了错误:
A message body reader for Java class javax.ws.rs.core.Response, and Java type class javax.ws.rs.core.Response, and MIME media type application/xml was not found javax.ws.rs.core.Response

我不需要Response对象,只需要状态码,我该如何获取它?

它会生成什么? - Alex Stybaev
一个javax.rs.core.Response - Eugenio Cuevas
啊,好的,抱歉!MediaType.APPLICATION_XML - Eugenio Cuevas
2个回答

4

好的,我通过更改请求响应类型来解决了它:

Response response = ws.type(MediaType.APPLICATION_XML).post(Response.class,list);

使用

ClientResponse response = ws.type(MediaType.APPLICATION_XML).post(ClientResponse.class,list);

如果 ClientResponse 是一个 com.sun.jersey.api.client.ClientResponse,那么...


1
在你的 Web 服务中,给你的 bar() 方法添加 @Consumes 注解和参数,因为你试图将名为 list 的对象放在那里。
我建议你使用 @POST,因为规范的 @PUT 不返回响应。
更新。顺便说一句,你的实体是空的 - 最好删除你的 @Produces 注解,只返回设置了状态的 Response
更新2。并从客户端中删除 .accept(MediaType.APPLICATION_XML) 方法。

谢谢,已经测试过了,但是结果还是一样。如果我返回一个“OK”字符串而不是响应,那么列表就会正常到达。我会更新问题的。 - Eugenio Cuevas
我在客户端那里得到了它。如果我在服务器端调试,我会看到进程接收了调用并正常执行,发送一个 Status.OK 响应。 - Eugenio Cuevas
更改完成,现在消息更改为:找不到Java类javax.ws.rs.core.Response和Java类型类javax.ws.rs.core.Response以及MIME媒体类型application/octet-stream的消息正文读取器。 - Eugenio Cuevas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接