我的问题是,在制作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();
}
谢谢:)
答案 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;
}
}