json - JSON 对象中 @type 的位置导致错误

标签 json jaxb moxy

给定以下类(class):

@XmlSeeAlso({A.class, B.class})
@XmlDiscriminatorNode("@type")
public abstract class Base implements Serializable {
}

A (和类似的 B )是:

@XmlDiscriminatorValue("A")
public class A extends Base {
    private String foo;
    // constructor, getter, setter
}

包装List<Base>包含这两种类型的对象将生成以下示例 JSON:

{
  "list": [
    {
      "@type": "A",
      "bar": 123
    },
    {
      "@type": "A",
      "bar": 789
    },
    {
      "@type": "B",
      "foo": "sddadad"
    },
    {
      "@type": "B",
      "foo": "ttf4eg4gf sd"
    },
    {
      "@type": "A",
      "bar": 465
    }
  ]
}

现在到我的问题出现的部分:当 @type属性从“第一个”位置移开,解码失败:

{
    "bar" : 123,
    "@type" : "A"
}

Exception Description: Missing class indicator field from database row [UnmarshalRecordImpl()].

这是预期的行为吗?我是否必须确保 @type声明始终是“第一”?

我正在使用 EclipseLink 2.5.1.v20130619-ffd088c 每晚构建。

最佳答案

当在解码器上指定 UnmarshallerProperties.JSON_ATTRIBUTE_PREFIX 时,目前 EclipseLink JAXB (MOXy)要求带有属性前缀的键出现在不带属性前缀的键之前。我已提出以下增强请求(请参阅下面的链接),您可以使用它来跟踪我们在此问题上的进展。

解决方法

仅当设置 UnmarshallerProperties.JSON_ATTRIBUTE_PREFIX 属性时,才会出现此问题。如果未设置,MOXy 可以毫无问题地解码以下内容:

{
    "bar" : 123,
    "type" : "A"
}

关于json - JSON 对象中 @type 的位置导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17271109/

相关文章:

jaxb - @XmlDiscriminatorNode/@XmlDecriminatorValue 不适用于 WebLogic Server

asp.net - 如何为采用类参数的asp.net webmethod格式化JSON

java - jaxb2-maven-plugin:无法从 WSDL 生成源

spring - 如何在 Controller 中使用 JAXB 和 Spring @ResponseBody 生成正确的站点地图命名空间?

java - MOXy/JAXB 注释在 weblogic 12c 上被忽略

java - 使用 MOXy 时使用 IDRef 编码 XML 标签的问题

wcf - WCFStorm 是否支持调用启用了 JSON 的 WCF 服务?

jQuery 自动完成 : On select parse other key from the same array

javascript - 在 Twitter API 调用中获取 'data is null' 但在浏览器中显示数据

Java Beans、BeanUtils 和 Boolean 包装器类