package com.alibaba.json.bvt.bug; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializeFilter; import com.alibaba.fastjson.serializer.ValueFilter; import junit.framework.TestCase; import org.apache.commons.lang.builder.ToStringBuilder; import java.io.Serializable; import java.util.HashSet; import java.util.Set; /** * Created by wenshao on 10/02/2017. */ public class Bug_for_xujin2 extends TestCase { public void test_for_bug() throws Exception { ContactTemplateParam param = new ContactTemplateParam(); param.setAuditStatus(AuditStatusType.AUDIT_FAILURE); String json = JSON.toJSONString(param, new SerializeFilter[] { new IntEnumFilter("auditStatus") }); assertEquals("{\"auditStatus\":0}", json); } public static class IntEnumFilter implements ValueFilter { private Set<String> needMaskFileds = new HashSet(); public IntEnumFilter() { } public IntEnumFilter(String... fileds) { if(fileds != null) { String[] arr$ = fileds; int len$ = fileds.length; for(int i$ = 0; i$ < len$; ++i$) { String filed = arr$[i$]; this.needMaskFileds.add(filed); } } } public Object process(Object object, String name, Object value) { return value == null?value:(this.needMaskFileds.contains(name) && value instanceof IntEnum ?Integer.valueOf(((IntEnum)value).getCode()):value); } } public static class ContactTemplateParam implements Serializable { private static final long serialVersionUID = 1L; public ContactTemplateParam() { // TODO Auto-generated constructor stub } /** 审核状态 **/ private AuditStatusType auditStatus; public AuditStatusType getAuditStatus() { return auditStatus; } public void setAuditStatus(AuditStatusType auditStatus) { this.auditStatus = auditStatus; } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } } public static enum AuditStatusType implements IntEnum<AuditStatusType> { AUDIT_FAILURE(0, "审核失败", "FAILED"), AUDIT_SUCCESS(1, "成功", "SUCCEED"), AUDIT_NO_SUBMIT(2, "未实名认证", "NONAUDIT"), AUDIT_SUBMIT(3, "审核中", "AUDITING"); private int code; private String desc; private String enCode; private AuditStatusType(int code) { this.code = code; } private AuditStatusType(int code, String desc, String enCode) { this.code = code; this.desc = desc; this.enCode = enCode; } public static AuditStatusType valuesOf(String enCode) { AuditStatusType[] arr$ = values(); int len$ = arr$.length; for(int i$ = 0; i$ < len$; ++i$) { AuditStatusType temp = arr$[i$]; if(temp.getEnCode().equals(enCode)) { return temp; } } return null; } public String getDesc() { return this.desc; } public String getEnCode() { return this.enCode; } public int getCode() { return this.code; } } public interface IntEnum<E extends Enum<E>> { int getCode(); } }