2013-04-01 35 views
3

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

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

虽然不能把'@XmlElement要求',出于某种原因,如果没有它,我仍然没有得到输出Json中的字段。尽管添加了@ @ XmlAcessorType,但即使没有'@ XmlElement',我也开始获取所有字段。 – Amol

回答

0

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

采取这种方法会为你节省大量的时间,如果你想 容易生产/消费既JSON和XML数据格式。因为即使是 ,您仍然可以使用统一的Java模型。另一个 的优势在于使用这种模型的简单性,因为JAXB 利用了带注释的POJO,并且这些可以作为简单的Java bean进行处理。

基于JAXB方法的缺点可能是,如果你需要一个非常具体的JSON格式的工作 。然后可能很难找到适当的方式来获得这种格式的生产和消费。这是一个 原因,提供了大量的配置选项,这样就可以 控制的事情是如何被序列化并反序列化回来。

以下是的JAXB豆如何能看起来像一个非常简单的例子。

例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; 
    } 
    } 
相关问题