在我当前的设置中,我使用带有 MOXy 的 Jersey 2.0,如jersey docs中所述。我完全依赖“Auto-Discoverable Features”,所以我不使用任何额外的配置或 JAXB 注释。
我的任务是反序列化服务器端的字符串数组。客户端正在发送 JSON 消息:
["foo","bar"]
在服务器端,下面的方法头应该反序列化它:
@POST
@Path("/stringArray")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response stringArray(List<String> stringList) {
...
}
问题: stringList的内容是{null,null},所以元素的数量总是正确的,但是字符串被设置为null。
一个小的包装类也是如此。这里的类:
public static class Data {
public List<String> stringList;
}
将方法签名更改为 stringArray(Data data) 并将 JSON 消息更改为:
{"stringList": ["foo","bar"]}
这两种方法有什么区别,我怎样才能让纯字符串数组工作?
更新: 所描述的问题由@Blaise 的回答解决。但是序列化 POJO 列表的密切相关问题仍然不起作用。信息:
[org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:找不到媒体类型=应用程序/json的MessageBodyWriter,类型=类java.util.ArrayList,genericType=类java.util.ArrayList。]
我找到的唯一解决方案是再次使用一个包含列表的小型包装类......