前言
在项目开发过程中,有一些特殊场景需要对敏感数据进行脱敏返回展示,比如用户的手机号、证件号、真实姓名、邮箱等,返回如:176****9331 之类的,怎么实现呢?
使用@JsonSerialize对数据进行格式化
首先,来看个简单的例子,数据库有个20位的Long
类型的ID,返回到前端之后,因为前端类型问题,会丢失精度,这个时候,我们就需要将Long
类型的数据格式化为String
类型进行返回,代码如下:
@Data
public class Demo {
/** 数据ID **/
@JsonSerialize(using = StringSerializer.class)
private Long id;
}
上面的代码,只需要在字段添加 @JsonSerialize(using = StringSerializer.class)
注解就可以完成Long
返回 String
的格式化效果。接下来,我们看看 StringSerializer
做了什么事情,源码:
public final class StringSerializer extends StdScalarSerializer<Object> {
private static final long serialVersionUID = 1L;
public StringSerializer() {
super(String.class, false);
}
public boolean isEmpty(SerializerProvider prov, Object value) {
String str = (String)value;
return str.isEmpty();
}
// 主要关注这个方法,这个是序列化方法
public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException {
// 将 object 直接转换成 String 返回
gen.writeString((String)value);
}
public final void serializeWithType