使用JAXB将JSON绑定到Java类

时间:2009-08-11 16:47:52

标签: java json jaxb jersey

我有以下JSON,其中可以是true或false:

{"flag1":<boolean value>, "flag2":<boolean value>}

我尝试使用Jersey和以下JAXB注释将其绑定到Java类:

@XmlRootElement
public class MyClass {
    @XmlElement(name = "flag1", type = Boolean.class)
    private Boolean flag1;
    @XmlElement(name = "flag2", type = Boolean.class)
    private Boolean flag2;

    ...
}

问题在于,当我为'flag1'或'flag2'分配非布尔值时,如下例所示,JAXB会自动为MyClass的'flag1'和'flag2'字段赋予false值。 / p>

{"flag1":"foo", "flag2":"bar"}

有没有办法注释'MyClass',这样当JSON的'flag1'和'flag2'不是布尔值时我会得到一个异常?

2 个答案:

答案 0 :(得分:2)

看起来泽西岛只是使用Boolean.valueOf,它将文字“true”以外的所有内容视为false。由于JavaScript没有变量类型的概念,因此这是一种可论证的有效行为。

相比之下,XML映射基于模式定义,模式定义具有非常具体的布尔值概念。


自从1.x天以来没有使用过Jersey(或JAXB),我想知道你是否需要注释实际的变量,或者你是否可以注释setter。或者也许您可以提供一个带String的setter并对其进行解析,而不是/与带有boolean的setter一起。

答案 1 :(得分:2)

如果您使用的是纯Jackson JAX-RS提供程序,那么您展示的内容将以您希望的方式工作(抛出异常)。它确实接受了一些变体(1和0,因为有些语言没有本机布尔类型),但不是没有有意义的等价物。

或者,正如所建议的那样,使用String类型的setter方法是有意义的,因为那时你可以手动控制转换。