content: 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();
      }
  }
  