0

服务器存根

  @GET
    @Path("/user/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public User getUser(@PathParam("id") String id){
        User user =  myService.getUserById(id);
        if (user!= null){
            return user;
        }
        return null;
    }

=============================== 客户端存根

User response = WinkRestClient.resource(path).contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).get(User.class);

抛出异常:

Exception in thread "main" java.lang.RuntimeException: A javax.ws.rs.ext.MessageBodyReader implementation was not found for class com.test.entity.User type and application/octet-stream media type.  Verify that all entity providers are correctly registered.  Add a custom javax.ws.rs.ext.MessageBodyReader provider to handle the type and media type if a JAX-RS entity provider does not currently exist.
    at org.apache.wink.client.internal.handlers.ClientResponseImpl.readEntity(ClientResponseImpl.java:122)
    at org.apache.wink.client.internal.handlers.ClientResponseImpl.getEntity(ClientResponseImpl.java:65)
    at org.apache.wink.client.internal.handlers.ClientResponseImpl.getEntity(ClientResponseImpl.java:52)
    at org.apache.wink.client.internal.ResourceImpl.invoke(ResourceImpl.java:196)
    at org.apache.wink.client.internal.ResourceImpl.get(ResourceImpl.java:303)
    at com.wolianw.sale.bl.ClResourceTest.main(ClResourceTest.java:14)

当服务器存根返回 null 时,客户端抛出此异常

怎么办,让客户端不抛出异常,让响应[User = null]

4

1 回答 1

0

您需要完全按照错误中的描述进行操作。为 MediaType.APPLICATION_OCTET_STREAM 创建 MessageBodyReader。

如果您的响应中没有有效负载并且当您返回 null 时就是这种情况,则客户端正在寻找注册的提供程序MediaType.APPLICATION_OCTET_STREAM,无论您在请求中设置什么接受标头以及响应的实际标头是什么。

如果你不喜欢这种行为,你可以使用 Jersey 客户端,我喜欢。

于 2013-07-27T06:09:53.960 回答