【问题标题】:JSON Parsing errors with RESTeasy/JAXBRESTeasy/JAXB 的 JSON 解析错误
【发布时间】:2014-01-09 18:10:03
【问题描述】:

我正在尝试调用 iTunes REST 服务,该服务通过 RESTeasy 客户端返回有关 iTunes 中定义的类型的信息。此调用返回的 JSON 对象如下所示:

{
   "35":{
      "name":"iPod Games",
      "id":"35",
      "url":"https://itunes.apple.com/us/genre/ipod-games/id35"
   },
   "36":{
      "name":"App Store",
      "id":"36",
      "url":"https://itunes.apple.com/us/genre/ios/id36?mt=8"
   }
}

我已经像这样定义了我的响应对象模型:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ITunesGenre implements Serializable {

    private static final long serialVersionUID = 4330727214147295490L;

    @XmlElement
    private String name = null;

    @XmlElement
    private String id = null;

   ...

}

但是,当我通过 RESTeasy 客户端进行调用时,我收到了序列化错误。我相信这是因为这不是一个真正的列表或对象数组。相反,似乎每个条目上都有一个“标识符”(在上面的示例中,“35”或“36”)。

给定一个像这样的 JSON 对象,我如何映射它以便 RESTeasy 客户端可以反序列化它?我以前没有遇到过这种格式的对象。我显然不能对每个标识符进行硬编码,因为会有多个标识符,而且它们可能会发生变化。

您可以通过clicking here 看到此调用返回的完整 JSON 对象(它相当大)。您会看到在整个对象中都可以找到此对象结构,而不是使用简单的对象列表或数组。

有什么想法吗?非常感谢您提供的任何帮助。

【问题讨论】:

  • 请发布您在服务器上收到的确切错误消息?
  • 恐怕这不能用JAXB来表达。我会接受org.json.JSONObject

标签: java json rest jaxb resteasy


【解决方案1】:

我想它可能看起来像这样(虽然我还没有测试过)

@XmlRootElement
public class Response implements Serializable
{
    public Response(){
    }

    private java.util.Map<String, Genre> genres = new java.util.HashMap<String, Genre> ();
}


public class Genre implements Serializable {

    private static final long serialVersionUID = 4330727214147295490L;

    public Genre(){
    }

    @XmlElement
    private String name = null;

    @XmlElement
    private String id = null;

   ...

}

【讨论】:

    【解决方案2】:

    响应是一个 Map,所以根元素不是您的 ITunesGenre 类而是 Map。我想很清楚如何修改响应对象。

    【讨论】:

    • 就是这样。我将客户端上的返回对象更改为 Map ,它就像一个魅力。谢谢!
    猜你喜欢
    • 2011-09-24
    • 2023-04-03
    • 1970-01-01
    • 2013-07-02
    • 2012-02-26
    • 2013-10-19
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多