我想使用Jackson来序列化一个包含泛型集合类型的对象。 这是界面:
public interface PagingAdapter <Id extends Serializable, T extends Entity<Id>> extends Serializable {
public List<T> getItem();
public void setItem(List<T> items);
public Boolean hasNextPage();
public Integer getTotalPage();
public Integer getPageSize();
public void setPageSize(int pageSize);
public Long getTotalItem();
public void setTotalItem(Long totalItem);
public void setCurrentPage(Integer currentPage);
public Integer getCurrentPage();
public Class<T> getEntityType();
public void setEntityType(Class<T> entityType);
}
这是实施:
public class PagingAdapterImpl<Id extends Serializable, T extends Entity<Id>> implements
PagingAdapter<Id,T> {
private static Integer DEFAULT_PAGE_SIZE = 20;
private Class<T> entityType;
private List<T> items = null;
private Integer pageSize = DEFAULT_PAGE_SIZE;
private Integer currentPage = 0;
private Long totalItem;
public PagingAdapterImpl(List<T> items, int currentPage, int pageSize, long totalItem) {
super();
this.items = items;
this.pageSize = pageSize;
this.currentPage = currentPage;
this.totalItem = totalItem;
}
public PagingAdapterImpl(){
}
@Override
public Class<T> getEntityType() {
return entityType;
}
@Override
public void setEntityType(Class<T> entityType) {
this.entityType = entityType;
}
@Override
public List<T> getItem() {
return items;
}
@Override
public void setItem(List<T> items) {
this.items = items;
}
@Override
public Boolean hasNextPage() {
return false;
}
@Override
public Integer getTotalPage() {
int rs = (int) (getTotalItem() % getPageSize() == 0 ? getTotalItem()
/ getPageSize() : getTotalItem() / getPageSize() + 1);
return 0;
}
@Override
public Integer getPageSize() {
return this.pageSize;
}
@Override
public Long getTotalItem() {
return this.totalItem;
}
@Override
public void setTotalItem(Long totalItem) {
this.totalItem = totalItem;
}
@Override
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
@Override
public Integer getCurrentPage() {
return currentPage;
}
@Override
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
}
我在Jackson 1.9中使用RestEasy。这个对象的rest方法的输出现在返回如下:
{
"status": 0,
"data": {
"entityType": null,
"pageSize": 1,
"currentPage": 1,
"totalItem": 1,
"item": [],
"totalPage": 0
}
}
&#34;项目&#34;属性无法序列化为JSON数组。我该如何解决这个问题?
public class PagingAdapterSerializer extends JsonSerializer<PagingAdapter<Long, Entity<Long>>> {
@Override
public void serialize(PagingAdapter<Long, Entity<Long>> value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeObjectField("item",value.getItem());
jgen.writeObjectField("totalItem",value.getTotalPage());
jgen.writeObjectField("pageSize",value.getPageSize());
jgen.writeObjectField("totalItem",value.getTotalItem());
jgen.writeObjectField("currentPage",value.getCurrentPage());
jgen.writeEndObject();
}
这是我的自定义序列化程序。但它不起作用
答案 0 :(得分:0)
除了将每个对象写入JsonGenerator之外,您还可以在代码下面为已定义的对象序列化它。
String toJson(Object object){
JSONSerializer ser = new JSONSerializer().transform(new ExcludeNullTransformer(), void.class);
ser.exclude("*.class");
return ser.serialize(object);
}
在您的代码中包含最新jackson的依赖项。