java - 使用 JAXB 将 JSON 绑定(bind)到 Java 类

标签 java json jaxb jersey

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

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

我尝试使用 Jersey 和以下 JAXB 注释将其绑定(bind)到 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”分配非 boolean 值时(如下例所示),JAXB 会自动为 MyClass 的“flag1”和“flag2”字段分配一个错误值。

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

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

最佳答案

看起来 Jersey 只是使用 Boolean.valueOf ,它将除字面上的“true”之外的所有内容都视为 false。由于 JavaScript 没有变量类型的概念,因此这可以说是一种有效的行为。

相比之下,XML 映射基于架构定义,该定义确实具有非常具体的 boolean 值概念。

<小时/>

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

关于java - 使用 JAXB 将 JSON 绑定(bind)到 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1261593/

相关文章:

java - DecimalFormat 和 Double 异常

JavaFX 3D 深度渲染不正确

json - 在 Go 中解码时如何识别无效值和未指定的字段?

java - 有什么方法可以限制 JAXB 中对象图的编码深度吗?

java - 使用 @XmlAnyElement 的 HashMap JAXB 映射

java - 如何在 Facelets 中使用循环

java - Apache Solr : Slave replicates 10+ times every time it polls (excessive commits? )

json - TypeError at/en/类型为 '__proxy__' 的对象不是 JSON 可序列化的

javascript - 将 jquery ajax (json) 附加到表

java - 如何使用 JAXB 编码和解码映射