0

我有以下 JSON,其中可以是真或假:

{"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 值。

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

有没有办法注释“MyClass”,以便当 JSON 的“flag1”和“flag2”不是布尔值时我得到一个异常?

4

2 回答 2

2

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

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


没有使用 Jersey(或自 1.x 天以来的 JAXB),我想知道您是否必须注释实际变量,或者是否可以注释设置器。或者,也许您可​​以提供一个接受 aString并解析它的 setter,而不是 / 以及一个接受 a 的 setter boolean

于 2009-08-11T17:09:18.577 回答
2

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

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

于 2010-09-02T19:16:00.950 回答