公司有个需求,给所有身份证,姓名,银行卡号,后台打印日志进行格式化如:身份证:431103******9999,姓名:张*红。主要作用是为了保密商户的资料。
拿到这样一个需求的时候,我首先想到的是,那么多个实体,每个实体身份证,姓名,银行卡可能字段命名是不一样的,那我怎么去做一个通用的方法,怎么才知道某个实体中某个字段需要进行格式化,是进行什么类型的格式~
经过思考,查找资料确定fastjson+fastjson过滤器+java自定义注解+java反射。Fastjson用于以json的方式打印对象日志,java注解用于标识某个实体类中某个字段需要进行何种格式化,加上java反射,后面新增实体某个字段需要进行格式化直接添加一个自定义注解,然后调用fastjson+过滤器即可进行格式化。一劳永逸呀!
实例如下:
Fastjson过滤器
importjava.lang.reflect.Field;
importorg.apache.log4j.Logger;
importorg.springframework.util.StringUtils;
importcom.alibaba.fastjson.serializer.ValueFilter;
importcom.eptok.transfer.bean.FieldFomatAnnotation;
importcom.eptok.transfer.enums.AnnotationFomatType;
/**
*
* 类名称:BeanPropertyFilter
* 类描述: 进行字段值格式化,如银行卡,收付款人姓名,身份证号
* 创建人:boys
* 创建时间:2017年7月17日下午4:05:41
*
*/
public class BeanPropertyFilter implements ValueFilter{
private static final Logger logger =Logg