第号一个注解
进口java.lang.annotation.ElementType;进口java.lang.annotation.Retention;
进口java.lang.annotation.RetentionPolicy;进口java.lang.annotation.Target;
/* *
* @Description:
* @Author: ckk
* @CreateDate: 2019/9/17 17:15
*/
@Target ({ElementType.METHOD})
@Retention (RetentionPolicy.RUNTIME)
公共@ interface json {
JSONField[]值();}
#第二个注解
进口java.lang.annotation。*;
/* *
* @Description:
* @Author: ckk
* @CreateDate: 2019/9/17 17:16
*/
@Target ({ElementType.METHOD})
@Retention (RetentionPolicy.RUNTIME)
@Repeatable (JSONS.class)
公共@ interface JSONField {
类类型();
String[]包括违约(){"};
String[]过滤器()默认{"};
}
#解析器进口com.fasterxml.jackson.annotation.JsonFilter;
进口com.fasterxml.jackson.core.JsonGenerator;进口com.fasterxml.jackson.databind.SerializerProvider;
进口com.fasterxml.jackson.databind.ser.BeanPropertyFilter;进口com.fasterxml.jackson.databind.ser.FilterProvider;
进口com.fasterxml.jackson.databind.ser.PropertyFilter;进口com.fasterxml.jackson.databind.ser.PropertyWriter;
导入 com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
进口java.util。*;
/* *
* @Description:
* @Author: ckk
* @CreateDate: 2019/9/17十七19 */
@JsonFilter (JacksonFilter)
公共类JacksonJsonFilter延伸FilterProvider {
地图,Set>includeMap=new HashMap ();
地图,Set>filterMap=new HashMap ();
公共JacksonJsonFilter () {}
公共空间包括(类类型,String[]字段){
this.addToMap(这一点。includeMap、类型、字段);
}
公共空滤(类类型,String[]字段){
this.addToMap(这一点。filterMap、类型、字段);
}
私人空白addToMap(地图,Set>地图,类类型,String[]字段){
设置自定义字段=地图(集)。getOrDefault(类型,new HashSet ());
fieldSet.addAll (arrays . aslist(领域));
地图。把(类型、自定义字段);
}
公共BeanPropertyFilter findFilter(对象filterId) {
把新UnsupportedOperationException(“访问方式不弃用过滤器 支持”);
}
公共PropertyFilter findPropertyFilter (filterId对象,对象 valueToFilter) {
返回新SimpleBeanPropertyFilter () {
公共空serializeAsField(对象pojo, JsonGenerator jgen, SerializerProvider箴言,PropertyWriter作家)抛出异常{
如果(JacksonJsonFilter.this.apply (pojo.getClass (), writer.getName ())) {
作家。serializeAsField (pojo, jgen箴言);
} else if (! jgen.canOmitFields ()) {
作家。serializeAsOmittedField (pojo, jgen箴言);
}
}
};
}
公共逻辑应用(类类型、字符串名称){
设置includeFields=(套)this.includeMap.get(类型);
设置filterFields=(套)this.filterMap.get(类型);
如果includeFields !=零,,includeFields.contains(名字)){
返回true;
}其他如果filterFields !=零,,! filterFields.contains(名称)) {
返回true;
}其他{
返回includeFields==零,,filterFields==零;
}
}
}
序列化器
进口com.fasterxml.jackson.core.JsonProcessingException;
进口com.fasterxml.jackson.databind.ObjectMapper;
进口org.apache.commons.lang3.StringUtils;
/* *
* @Description:
* @Author: ckk
* @CreateDate: 2019/9/17 17:18
*/
公共类CustomerJsonSerializer {
objectmap mapper=new objectmap ();
JacksonJsonFilter jacksonFilter=new JacksonJsonFilter ();
公共CustomerJsonSerializer () {}
公共空滤(类clazz、String[]包括String[]过滤器){
如果(clazz !=null) {
如果(包括。长度比;1 | |包括。长度==1,, org.apache.commons.lang3.StringUtils.isNotBlank(包括[0])){
this.jacksonFilter。包括(clazz,包括);
}
如果过滤器。长度比;1 | |过滤器。长度==1,, StringUtils.isNotBlank(过滤器[0])){
this.jacksonFilter。过滤器(clazz、过滤);
}
this.mapper。null null null null null null null null null