【问题标题】:Moxy, JSON and Jersey 2.0 does not deserialize plain String arrayMoxy、JSON 和 Jersey 2.0 不反序列化纯字符串数组
【发布时间】:2013-07-04 10:46:37
【问题描述】:

在我当前的设置中,我使用带有 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, type=class java.util.ArrayList, genericType=class java.util.ArrayList.]

我找到的唯一解决方案是再次使用包含 List 的小型包装类...

【问题讨论】:

  • 一般来说,序列化/反序列化集合似乎很困难,例如List> 而不将它们包装在一个类中。有人可以确认吗?
  • 问题通过使用 org.eclipse.persistence.core_2.5.1.v20130706-f712d02.jar 和 org.eclipse.persistence.moxy_2.5.1.v20130706-f712d02.jar 而不是 2.5.0 版本解决.感谢@blaise

标签: json jersey moxy


【解决方案1】:

您看到的问题是由于EclipseLink JAXB (MOXy) 中的一个错误:

此错误已在 EclipseLink 2.5.1 和 2.6.0 流中得到修复。您可以从以下链接下载从 2013 年 7 月 5 日开始的每晚版本:

【讨论】:

    猜你喜欢
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    相关资源
    最近更新 更多