Java中@JsonFormat注解的使用指南
@JsonFormat
注解是 Jackson 库提供的一个强大工具,用于在序列化和反序列化 Java 对象时自定义 JSON 格式。特别是在 shape = JsonFormat.Shape.STRING
时,它可以将非字符串类型(如日期、枚举、数字等)转换为字符串。以下是一些常见场景及其使用示例。
1. 日期格式化
在处理日期字段时,@JsonFormat
注解允许你指定日期的格式和时区。
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class User {
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date birthDate;
}
在这个例子中,birthDate
字段将被序列化和反序列化为指定格式的字符串。timezone
参数指定了时区,这里选择 "GMT+8" 是因为中国标准时间是 GMT+8。
2. 将Long类型序列化为字符串
在处理大数值时,前端可能需要将Long类型字段作为字符串处理,以避免精度丢失。
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@Data
public class User {
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long id;
}
在这个例子中,id
字段在序列化时将被转换为字符串,确保前端能够正确处理。
3. 序列化和反序列化时固定类型
有时,你可能希望某些类型在序列化和反序列化时保持固定格式,例如将枚举类型转换为字符串。
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@Data
public class User {
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING)
private Status status;
public enum Status {
ACTIVE, INACTIVE
}
}
在这个例子中,status
字段将被序列化为字符串,如 "ACTIVE" 或 "INACTIVE"。
综合示例
以下是一个综合示例,结合了上述所有场景:
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class User {
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date birthDate;
@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long id;
@JsonFormat(shape = JsonFormat.Shape.STRING)
private Status status;
public enum Status {
ACTIVE, INACTIVE
}
}
在这个综合示例中,每个字段都使用了 @JsonFormat
注解来指定其序列化和反序列化的行为。
其他属性
@JsonFormat
注解还支持其他属性,如 locale
,用于指定本地化设置。你可以根据需要进行配置。
通过这些示例和解释,希望你能够更好地理解和使用 @JsonFormat
注解,以满足不同的序列化需求。