我正在尝试设置一个玩具应用程序(有一天它可能会变成一个真正的应用程序)。我遇到了 Wink 和 Jackson 的问题。我有两个应用程序:一个在码头上运行 wink-server,似乎可以提供一些 JSON 数据;一个在码头上运行 wink-client 并接收 JSON 数据就好了。问题在于将 JSON 数据自动反序列化回我的 Java bean。
这是我在 wink 客户端操作中使用的代码:
RestClient client = new RestClient();
Resource resource = client.resource("http://localhost:8081/helloworld");
User user = resource.accept(MediaType.APPLICATION_JSON).get(User.class);
这是我尝试运行 Struts 操作时收到的错误:
java.lang.RuntimeException: No javax.ws.rs.ext.MessageBodyReader found for type class my.package.structure.User and media type application/json. Verify that all entity providers are correctly registered.
org.apache.wink.client.internal.handlers.ClientResponseImpl.readEntity(ClientResponseImpl.java:123)
org.apache.wink.client.internal.handlers.ClientResponseImpl.getEntity(ClientResponseImpl.java:65)
org.apache.wink.client.internal.handlers.ClientResponseImpl.getEntity(ClientResponseImpl.java:52)
org.apache.wink.client.internal.ResourceImpl.invoke(ResourceImpl.java:186)
org.apache.wink.client.internal.ResourceImpl.get(ResourceImpl.java:294)
my.package.structure.action.HelloWorldAction.execute(HelloWorldAction.java:29)
...
如果我用以下行替换第一个代码片段中的最后一行,一切正常且花花公子。
String message = resource.accept(MediaType.APPLICATION_JSON).get(String.class);
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(message, User.class);
很明显,数据传输得很好,但问题似乎在于 JacksonJsonProvider 类未向 Wink 客户端注册这一事实。我已经看到了很多向 Wink 服务器注册提供程序的方法,但不是 Wink 客户端。
是否可以使第一个代码段正常运行?如果是这样,怎么做?
(顺便说一句,另一个问题可能是我的用户类缺少注释。现在没有。也许我需要一些......)