Moxy、JSON 和 Jersey 2.0 无法反序列化普通字符串数组。

5
在我的当前设置中,我使用Jersey 2.0和MOXy,如Jersey文档所述。我完全依赖于“可自动发现的特性”,因此不使用任何额外的配置或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的答案解决了所描述的问题。但是,序列化POJOs列表的相关问题仍无法解决。消息如下:
[org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: 找不到用于媒体类型=application/json、类型=class java.util.ArrayList、泛型类型=class java.util.ArrayList的MessageBodyWriter。]
我找到的唯一解决方案是再次使用包含List的小包装类...

一般而言,似乎很难对集合(例如List<?>)进行序列化/反序列化,而不将它们包装在一个类中。有人可以确认吗? - adler
通过使用org.eclipse.persistence.core_2.5.1.v20130706-f712d02.jar和org.eclipse.persistence.moxy_2.5.1.v20130706-f712d02.jar代替2.5.0版本,问题得到解决。感谢@blaise。 - adler
1个回答

3

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