杰克逊序列化列表实体(加场到根目录)

问题描述:

这是我的实体杰克逊序列化列表实体(加场到根目录)

@Entity 
public class Product extends AbstractBaseEntity { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Type(type = "objectid") 
    private String id; 
    private String title; 

我的资源

@Path(value = ApiConstant.Urls.PRODUCTS) 
public class ProductResource { 

    @Inject 
    private ProductService productService; 

    @GET 
    @Path(value = ApiConstant.Urls.PRODUCTS) 
    @Produces(value = MediaType.APPLICATION_JSON) 
    public List getProducts(){ 
     return productService.findAll(); 
    } 

我JSON响应

[ { 
    "id" : "596b6a02f70a0878590bcf08", 
    "title" : "test1", 
    "description" : "description test 1" 
}, { 
    "id" : "596b6b00f70a087b72d377eb", 
    "title" : "test1", 
    "description" : "description test 1" 
}, { 
    "id" : "596b6b75f70a087d40f580d5", 
    "title" : "test1", 
    "description" : "description test 1" 
} ] 

我想创建一个计数字段对这样的列表 中的项目进行计数并将该列表添加到结果字段

{ 
    "count": 3, 
    "results": [ 
    { 
     "id" : "596b6a02f70a0878590bcf08", 
     "title" : "test1", 
     "description" : "description test 1" 
    }, { 
     "id" : "596b6b00f70a087b72d377eb", 
     "title" : "test1", 
     "description" : "description test 1" 
    }, { 
     "id" : "596b6b75f70a087d40f580d5", 
     "title" : "test1", 
     "description" : "description test 1" 
    } ], 
} 

我想序列由JPA持续返回商品目录

+1

您可以创建一个新的类'ProductsWrapper'与'count'和'results'然后在'getProducts'方法创建的这个实例,而是返回它的名单。 – tima

您可以使用下面的类包括计数与Product实体的名单一起:

public class ResultList { 
    private int count; 
    @JsonProperty("results") private List<Product> products; 

    public List<Product> getProducts() { 
     return products; 
    } 

    public void setProducts(List<Product> products) { 
     this.products = Objects.requireNonNull(products, "products"); 
     this.count = products.size(); 
    } 

    public int getCount() { 
     return count; 
    } 
} 
+0

太好了......感谢您的帮助 – Pako

类泛型type

public class ResultList<T> { 

    private int count; 
    @JsonProperty("results") 
    private List<T> items; 

    public List<T> getItems() { 
     return items; 
    } 

    public void setItems(List<T> items) { 
     this.items = Objects.requireNonNull(items, "items"); 
     this.count = items.size(); 
    } 

    public int getCount() { 
     return count; 
    } 
} 

ProductResource

@GET 
@Path(value = ApiConstant.Urls.PRODUCTS) 
@Produces(value = MediaType.APPLICATION_JSON) 
public ResultList getProducts(){ 
    List products = productService.findAll(); 
    ResultList result = new ResultList<Product>(); 
    result.setItems(products); 
    return result; 

} 

感谢@ CK1