java前后端分离使用注解优雅的返回实体部分属性

  


第号一个注解

进口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

java前后端分离使用注解优雅的返回实体部分属性