HiAll,
我在开发分支中遇到以下问题: 如果我使用泽西REST服务来序列化POJO包含嵌套的其他POJO的列表,那么这个嵌套的POJO将不会被序列化。此问题仅在分支中可重现。
如果我在分支中使用POJO structur原型,我没有问题。
详情:
The POJO (Domain):
public class Article {
private int id;
private int name;
// getter & setter
}
POJO(DTO)
public class DTO {
private List<Article> articles;
private String message;
public DTO {
articles= new ArrayList<>();
}
getArticles() {
return articles;
}
getArticlesCount() {
return articles.size();
}
public void getMessage() {
return message;
}
public String getMessage() {
return message;
}
....
}
将创建1篇文章,其中id = 1并命名为“firstArticle” 服务调用后序列化的结果找到所有文章:
分支 中的
*{"message":"1 article found","articlesCount":1
}*
原型 中的
{
{"message":"1 article found","articlesCount":1[{"id":1,"name":"firstArticle"]}
}
我没有发生什么事。我查看了所有设置(web.xml,jersey版本等)
答案 0 :(得分:0)
如果您使用Jackson JSON library,您的POJO将由Jackson JSON lib自动处理,以在JSON和POJO之间进行转换。您还需要在web.xml中添加以下行:
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
然后在Jersey资源类中,使用@Produces
和@Consumes
注释来指示数据格式为JSON:
@Path("/myResource")
@Produces("application/json")
public class SomeResource {
@GET
public String doGetAsJson() {
...
}
}
答案 1 :(得分:0)
按照上面的答案设置Jersey POJO mappping,然后尝试以下嵌套的POJO示例。
文章类:
public class Article {
private int id;
private String name;
public Article(int id, String name) {
this.id = id;
this.name = name;
}
//getter and setter ...
}
包含Article类的Book类:
public class Book {
private List<Article> articles;
private String message;
private int articleCount;
public List<Article> getArticles() {
return articles;
}
public void setArticles(List<Article> articles) {
this.articles = articles;
setArticleCount(articles.size());
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public int getArticleCount() {
return articleCount;
}
public void setArticleCount(int articleCount) {
this.articleCount = articleCount;
}
}
最后在Jersey资源类NestedPojoResource:
@Path("/nested-pojo")
public class NestedPojoResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Book getNestedPojo() {
Book book = new Book();
List<Article> articles = new ArrayList<Article>();
articles.add(new Article(1, "firstArticle"));
articles.add(new Article(2, "secondArticle"));
book.setArticles(articles);
book.setMessage(book.getArticleCount() + " articles found");
return book;
}
}
当你转到http://example.com/myappname/nested-pojo时,你会看到包含嵌套POJO字段的正确JSON输出:
{"articles":[{"id":1,"name":"firstArticle"},{"id":2,"name":"secondArticle"}],"message":"2 articles found","articleCount":2}