Jaxb需要@XmlElement吗?

时间:2013-04-01 18:48:44

标签: json xml jaxb jersey

我的问题是,在制作JSON响应时,是否有必要在pojo中的每个元素之前添加@XmlElement以由jaxb拾取。我正在使用jersey-json 1.17。我问这个的原因是,the example given on Jersey site不使用注释。

我得到了{}的输出,但是当我在属性之前添加@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();
}

谢谢:)

2 个答案:

答案 0 :(得分:1)

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

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

为您的课程添加注释

答案 1 :(得分:0)

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

  

如果您愿意,采用这种方法可以为您节省大量时间   轻松生成/使用JSON和XML数据格式。因为甚至   那么你仍然可以使用统一的Java模型。另一个   优点是使用这种模型的简单性,如JAXB   利用带注释的POJO,这些可以作为简单的Java处理   豆。

     

基于JAXB的方法的缺点可能是您需要工作   具有非常特定的JSON格式。然后可能很难找到一个   获得生成和消费这种格式的正确方法。这是一个   之所以提供很多配置选项,是因为您   可以控制事物的序列化和反序列化。

     

以下是一个非常简单的例子,说明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;
    }
  }