根据属性值,自定义改变属性值进行序列化
JsonSerialize用于序列化场景,被此注解修饰的字段或者get方法会被用于序列化,并且using属性指定了执行序列化操作的类;
执行序列化操作的类,需要继承自JsonSerializer,如下所示,TowardEnumSerializer的作用是将TowardEnum类型转成String类型:
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Objects;
import java.util.stream.Stream;
@Getter
@AllArgsConstructor
public enum TowardEnum {
/**
* 未知
*/
UNKNOWN(0, "未知"),
/**
* 东
*/
NORTH(1,"东"),
/**
* 南
*/
SOUTH(2,"南"),
/**
* 西
*/
EAST(3,"西"),
/**
* 北
*/
WEST(4,"北"),
/**
* 东南
*/
SOUTHEAST(5,"东南"),
/**
* 西南
*/
SOUTHWEST(6,"西南"),
/**
* 东北
*/
NORTHEAST(7,"东北"),
/**
* 西北
*/
NORTHWEST(8,"西北");
@EnumValue
private final Integer id;
private final String desc;
public static String getToward(Integer id) {
return Arrays.stream(TowardEnum.values()).filter(e -> Objects.equals(e.id, id)).map(e -> e.desc).findFirst().orElse("");
}
}
import cn.gcfc.admin.enums.house.TowardEnum;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
public class TowardEnumSerializer extends JsonSerializer<TowardEnum> {
@Override
public void serialize(TowardEnum towardEnum, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString(towardEnum.getDesc());
}
}
VO
@ApiModel(value = "房间信息")
public class RoomVO {
@JsonSerialize(using = TowardEnumSerializer.class)
@ApiModelProperty(value = "房间朝向")
private TowardEnum toward;
}
根据属性值,自定义改变属性值进行反序列化
执行反序列化操作的类需要继承自JsonDeserializer,如下所示,Long2DateDeserialize的作用是将Long类型转成startTime字段对应的Date类型:
public class Long2DateDeserialize extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
if(null!=p && null!=ctxt && p.getLongValue()>0L ) {
return new Date(p.getLongValue());
}
return null;
}
}
DTO
public class RoomDTO {
@JsonDeserialize(using = Long2DateDeserialize.class)
private Data startTime;
}