Json序列化,前缀或者脱敏实现

注解+aop

一:定义一个注解

二:在序列化时候,判断字段上是否有注解,进行序列化的操作

三:在对应的字段上添加上注解

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = SensitiveWordSerializer.class)
public @interface SensitiveWord {
    SensitiveWordType sensitiveWordType() default SensitiveWordType.MOBILE ;
}
public class SensitiveWordSerializer extends JsonSerializer<String> implements ContextualSerializer {

    private SensitiveWordType sensitiveWordType  ;

    @Override
    public JsonSerializer<?> createContextual(SerializerProvider prov,BeanProperty property) throws JsonMappingException {
        SensitiveWord sensitiveWord = property.getAnnotation(SensitiveWord.class);
        if (sensitiveWord != null) {
            sensitiveWordType = sensitiveWord.sensitiveWordType();
        }
        return this ;
    }

    @Override
    public void serialize(String value,JsonGenerator gen,SerializerProvider serializers)
            throws IOException, JsonProcessingException {
        if (!StringUtils.hasText(value)) {
            gen.writeString(value);
            return;
        }
        if (sensitiveWordType != null) {
            value = value.replaceAll(sensitiveWordType.getRegex() , sensitiveWordType.getReplacement());
        }
        gen.writeString(value);
    }

}
    @SensitiveWord
    @ApiModelProperty(value = "机构联系方式", example = "13688888888")
    private String contact;

结果

 

 

注解+序列化的实现

 

posted @ 2019-09-24 16:13  七分饱  阅读(1992)  评论(0编辑  收藏  举报