1

我有一个 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"}]

我可以这样做吗?感谢您的帮助。

4

3 回答 3

2

您要求的 JSON 是一个包含单个字段 ( ratings) 的对象,该字段是一个数组或您的Rating对象。如果您启用了 POJO JSON 支持,这似乎是您所做的,如果这是您想要的,这就是您必须返回的。

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

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

更改您的方法签名以返回Responsethen 的实例:

return new Reponse(ratings);

有一个相当广泛的指南在这里找到

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

于 2013-03-05T17:32:08.677 回答
1

如果您想继续使用 Jersey 的直接对象映射功能,那么可以 - 创建一个包含“评级”列表的对象是最好的方法。

否则,您可以创建自定义序列化程序。有关更多详细信息,请参阅此示例

于 2013-03-05T17:24:31.247 回答
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
    }
}
于 2013-03-05T17:33:34.707 回答