3

我的问题是,在做出 JSON 响应时,是否有必要在 pojo 中的每个元素之前添加 @XmlElement 才能被 jaxb 拾取。我正在使用 jersey-json 1.17 。我问这个的原因是,泽西网站上给出的例子没有使用注释。

我得到一个输出 as {},但是当我在属性之前添加 @XmlElement 时,我得到了预期的 JSON 输出。我做错了什么,因为我的 JSON 字符串是空的吗?

我的代码:

顶点列表填充在构造函数中。

这会产生错误的输出{}

@XmlRootElement
public class SquareModel {
    List<Float> vertices = new ArrayList<Float>();
    ....
}

而这会产生正确的 JSON 字符串:

@XmlRootElement
public class SquareModel {
    @XmlElement(name="vertices")
    List<Float> vertices = new ArrayList<Float>();
    ....
}

我的返回 JSON 的资源类

@GET
@Produces(MediaType.APPLICATION_JSON)
public SquareModel getJsonString() {
    return new SquareModel();
}

谢谢 :)

4

2 回答 2

1

不,默认情况下,JAXB (JSR-22@) 实现会将所有公共字段和属性(get/set 组合)视为已映射(不需要@XmlElement注释)。

如果您想注释一个字段,我建议您使用@XmlAccessorType(XmlAccessType.FIELD)

于 2013-04-01T19:00:49.020 回答
0

根据这个http://jersey.java.net/nonav/documentation/latest/json.html#json.jaxb.approach.section 你应该有这个注释(我也在我的代码中使用它,即使它是 XML面向,但它也给了我很酷的 JSON)

如果您想轻松地生成/使用 JSON 和 XML 数据格式,采用这种方法将为您节省大量时间。因为即便如此,您仍然可以使用统一的 Java 模型。另一个优点是使用这种模型的简单性,因为 JAXB 使用带注释的 POJO,这些可以作为简单的 Java bean 处理。

如果您需要使用非常特定的 JSON 格式,则基于 JAXB 的方法的一个缺点可能是。那么可能很难找到一种适当的方法来生产和使用这种格式。这就是为什么提供了很多配置选项的原因,以便您可以控制事物如何序列化和反序列化。

以下是一个非常简单的示例,说明 JAXB bean 的外观。

例 5.3。简单的 JAXB bean 实现

@XmlRootElement
   public class MyJaxbBean {
     public String name;
     public int age;

     public MyJaxbBean() {} // JAXB needs this

     public MyJaxbBean(String name, int age) {
       this.name = name;
      this.age = age;
    }
  }
于 2013-04-01T18:56:19.983 回答