1. 创建序列化类
- 继承JsonSerializer或者StdSerializer,添加泛型
- 自定义字符串序列化类,md5脱敏
package com.example.fisher.gradledemo.sysuser.entity;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.util.DigestUtils;
import java.io.IOException;
public class StringJsonSerializer extends JsonSerializer<String> {
@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (value != null) {
String s = DigestUtils.md5DigestAsHex(value.getBytes("UTF-8"));
gen.writeString(s);
}
}
}
package com.example.fisher.gradledemo.sysuser.entity;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
public class LocalDateTime2Long extends StdSerializer<LocalDateTime> {
public LocalDateTime2Long() {
super(LocalDateTime.class);
}
@Override
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider provider) throws IOException {
Long epochSecond = value.toEpochSecond(ZoneOffset.ofHours(8));
gen.writeObject(epochSecond);
}
}
2. 创建反序列化类
package com.example.fisher.gradledemo.sysuser.entity;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
public class AgeDeserializer extends JsonDeserializer<Integer> {
@Override
public Integer deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
int intValue = p.getIntValue();
return intValue * 10;
}
}
3. 实体类字段添加注解
- 序列化@JsonSerialize,反序列化@JsonDeserialize
package com.example.fisher.gradledemo.sysuser.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@SuppressWarnings("serial")
@Data
public class SysUser extends Model<SysUser> {
@TableId(type = IdType.AUTO)
private Long userId;
@JsonSerialize(using = LocalDateTime2Long.class)
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;
@TableLogic
@JsonIgnore
private Integer delFlag;
@JsonSerialize(using = StringJsonSerializer.class)
private String name;
@JsonDeserialize(using = AgeDeserializer.class)
private Integer age;
private String interest;
@Override
public Serializable pkVal() {
return this.userId;
}
}
4. 反序列操作
5. 序列化操作