将父成员添加到JSON数据

时间:2013-03-05 17:09:14

标签: java json web-services

我有一个REST Web服务,它从自定义类型的ArrayList生成JSON格式输出。

@GET()
@Produces("application/json")
@Path("/ratings")
public List<Rating> getRatings( ) {
Rating rating;
List<Rating> ratings = new ArrayList<Rating>();
rating= new Rating();
//here I set rating object
rating.setNote(...);
// etc....
ratings.add(rating);

//the method returns ratings arraylist
return ratings;

我想将父成员添加到所有JSON数据中,如下所示:

{"ratings":[{"a":"1","b":"test"}]}

而不喜欢:

[{"a":"1","b":"test"}]

我能这样做吗? 谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

您要求的JSON是一个包含单个字段(ratings)的对象,该字段是数组或Rating个对象。如果您启用了POJO JSON支持,那么如果您想要的话,那就是您必须返回的内容。

@XmlRootElement
class Response {
    public final List<Rating> ratings;

    public Resonse(List<Rating> ratings) {
        this.ratings = ratings;
    }
}

更改方法签名以返回Response的实例,然后:

return new Reponse(ratings);

找到了相当广泛的指南here

选项B只是自己进行JSON序列化并返回String(JSON)。

答案 1 :(得分:1)

如果您想继续使用Jersey的直接对象映射功能,那么是 - 创建一个包含&#34; Ratings&#34;是最好的方式。

否则,您可以创建自定义序列化程序。有关详细信息,请参阅this example

答案 2 :(得分:0)

试试吧

@Provider
@Produces({MediaType.APPLICATION_JSON})
public class XJsonBodyWriter implements MessageBodyWriter<Object> {
    // implement methods
    public void writeTo(Object obj, Class<?> clazz, Type type,
        Annotation[] annotations, MediaType mediaType,
        MultivaluedMap<String, Object> map, OutputStream out)
        throws IOException, WebApplicationException {
        // serialize it how you want
    }
}