我有一个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"}]
我能这样做吗? 谢谢你的帮助。
答案 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
}
}