package com.alibaba.json.bvt.bug; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.parser.ParserConfig; import junit.framework.TestCase; import com.alibaba.fastjson.JSON; public class Bug_for_generic extends TestCase { protected void setUp() throws Exception { ParserConfig.global.addAccept("NotifyDetail"); } public void test() throws Exception { String json = "{\"@type\":\"com.alibaba.json.bvt.bug.Bug_for_generic$NotifyDetail\",\"args\":[\"61354557\",\"依依\",\"六\"],\"destId\":60721687,\"detailId\":3155063,\"display\":false,\"foundTime\":{\"@type\":\"java.sql.Timestamp\",\"val\":1344530416000},\"hotId\":0,\"srcId\":1000,\"templateId\":482}"; JSON.parseObject(json, NotifyDetail.class); System.out.println("NotifyDetail对象没问题"); String json2 = "{\"@type\":\"com.alibaba.json.bvt.bug.Bug_for_generic$Pagination\",\"fromIndex\":0,\"list\":[{\"@type\":\"NotifyDetail\",\"args\":[\"61354557\",\"依依\",\"六\"],\"destId\":60721687,\"detailId\":3155063,\"display\":false,\"foundTime\":{\"@type\":\"java.sql.Timestamp\",\"val\":1344530416000},\"hotId\":0,\"srcId\":1000,\"templateId\":482},{\"@type\":\"NotifyDetail\",\"args\":[\"14527269\",\"懒洋洋\",\"///最佳拍档,非常\",\"24472950\"],\"destId\":60721687,\"detailId\":3151609,\"display\":false,\"foundTime\":{\"@type\":\"java.sql.Timestamp\",\"val\":1344354485000},\"hotId\":0,\"srcId\":1000,\"templateId\":40},{\"@type\":\"NotifyDetail\",\"args\":[\"51090218\",\"天之涯\",\"天会黑,人会变。三分\"],\"destId\":60721687,\"detailId\":3149221,\"display\":false,\"foundTime\":{\"@type\":\"java.sql.Timestamp\",\"val\":1344247529000},\"hotId\":0,\"srcId\":1000,\"templateId\":459},{\"@type\":\"NotifyDetail\",\"args\":[\"51687981\",\"摹然回首梦已成年\",\"星星在哪里都很亮的,\"],\"destId\":60721687,\"detailId\":3149173,\"display\":false,\"foundTime\":{\"@type\":\"java.sql.Timestamp\",\"val\":1344247414000},\"hotId\":0,\"srcId\":1000,\"templateId\":459},{\"@type\":\"NotifyDetail\",\"args\":[\"41486427\",\"寒江蓑笠\",\"双休了\"],\"destId\":60721687,\"detailId\":3148148,\"display\":false,\"foundTime\":{\"@type\":\"java.sql.Timestamp\",\"val\":1344244730000},\"hotId\":0,\"srcId\":1000,\"templateId\":459}],\"maxLength\":5,\"nextPage\":2,\"pageIndex\":1,\"prevPage\":1,\"toIndex\":5,\"totalPage\":3,\"totalResult\":13}"; JSON.parseObject(json2, Pagination.class); } public static class Pagination<T> implements Serializable { /** * */ private static final long serialVersionUID = 5038839734218582220L; private int totalResult = 0; private int totalPage = 1; private int pageIndex = 1; private int maxLength = 5; private int fromIndex = 0; private int toIndex = 0; private List<T> list = new ArrayList<T>(); public Pagination(){ } public void setTotalResult(int totalResult) { this.totalResult = totalResult; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public void setPageIndex(int pageIndex) { this.pageIndex = pageIndex; } public void setMaxLength(int maxLength) { this.maxLength = maxLength; } public void setFromIndex(int fromIndex) { this.fromIndex = fromIndex; } public void setToIndex(int toIndex) { this.toIndex = toIndex; } public int getFromIndex() { return this.fromIndex; } public int getToIndex() { return this.toIndex; } public int getNextPage() { if (this.pageIndex < this.totalPage) { return this.pageIndex + 1; } else { return this.pageIndex; } } public int getPrevPage() { if (this.pageIndex > 1) { return this.pageIndex - 1; } return this.pageIndex; } /** * @return the currentPage */ public int getPageIndex() { return pageIndex; } /** * @return the list */ public List<T> getList() { if (list == null) { return new ArrayList<T>(); } return new ArrayList<T>(list); } /** * @return the totalPage */ public int getTotalPage() { return totalPage; } /** * @return the totalRecord */ public int getTotalResult() { return totalResult; } public int getMaxLength() { return maxLength; } /** * @param totalResult * @param pageIndex * @param maxLength */ public Pagination(int totalResult, int pageIndex, int maxLength){ if (maxLength > 0) { this.maxLength = maxLength; } if (totalResult > 0) { this.totalResult = totalResult; } if (pageIndex > 0) { this.pageIndex = pageIndex; } this.totalPage = this.totalResult / this.maxLength; if (this.totalResult % this.maxLength != 0) { this.totalPage = this.totalPage + 1; } if (this.totalPage == 0) { this.totalPage = 1; } if (this.pageIndex > this.totalPage) { this.pageIndex = this.totalPage; } if (this.pageIndex <= 0) { this.pageIndex = 1; } this.fromIndex = (this.pageIndex - 1) * maxLength; this.toIndex = this.fromIndex + maxLength; if (this.toIndex < 0) { this.toIndex = fromIndex; } if (this.toIndex > this.totalResult) { this.toIndex = this.totalResult; } } /** * @param datas the datas to set */ public void setList(List<T> list) { this.list = list; } /* * (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { StringBuffer sb = new StringBuffer(); sb.append("Pagination:\r\n"); sb.append("\tpageIndex\t" + this.pageIndex + "\r\n"); sb.append("\ttotalPage\t" + this.totalPage + "\r\n"); sb.append("\tmaxLength\t" + this.maxLength + "\r\n"); sb.append("\ttotalResult\t" + this.totalResult + "\r\n"); for (T t : list) { sb.append(t + "\r\n"); } return sb.toString(); } } public static class NotifyDetail implements Serializable { /** * */ private static final long serialVersionUID = 8760630447394929224L; private int detailId; private int hotId; private int templateId; private int srcId; private int destId; private boolean display; private java.sql.Date foundTime; private List<String> args = new ArrayList<String>(); public int getDetailId() { return detailId; } public void setDetailId(int detailId) { this.detailId = detailId; } public int getHotId() { return hotId; } public void setHotId(int hotId) { this.hotId = hotId; } public int getTemplateId() { return templateId; } public List<String> getArgs() { return args; } public void setArgs(List<String> args) { this.args = args; } public void setTemplateId(int templateId) { this.templateId = templateId; } public int getSrcId() { return srcId; } public void setSrcId(int srcId) { this.srcId = srcId; } public int getDestId() { return destId; } public void setDestId(int destId) { this.destId = destId; } public boolean isDisplay() { return display; } public void setDisplay(boolean display) { this.display = display; } public java.sql.Date getFoundTime() { return foundTime; } public void setFoundTime(java.sql.Date foundTime) { this.foundTime = foundTime; } /* * (non-Javadoc) * @see java.lang.Object#hashCode() */ @Override public int hashCode() { int hasCode = 0; if (this.detailId != 0) { hasCode += this.detailId; } return hasCode; } /* * (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (!(obj instanceof NotifyDetail)) { return false; } return this.hashCode() == obj.hashCode(); } } }