我有以下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'不是布尔值时我会得到一个异常?
答案 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方法是有意义的,因为那时你可以手动控制转换。