【问题标题】:Is @XmlElement necessary for JaxbJaxb 是否需要 @XmlElement
【发布时间】:2013-04-01 18:48:43
【问题描述】:

我的问题是,在做出 JSON 响应时,是否有必要在 pojo 中要被 jaxb 拾取的每个元素之前添加 @XmlElement。我正在使用 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();
}

谢谢:)

【问题讨论】:

  • 虽然不需要输入@XmlElement,但由于某种原因,没有它我仍然无法获得输出 Json 中的字段。尽管添加了@XmlAcessorType,但即使没有@XmlElement,我也开始获取所有字段。

标签: json xml jaxb jersey


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    据此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;
        }
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 2013-02-12
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多