关于@JsonFormat和@DataFormat

@JsonFormat和@DateTimeFormat是用于处理日期和时间格式化的方法,分别在后端向前端提交数据和前端向后端提交数据时使用。@JsonFormat依赖于Jackson库,用于规定日期时间的输出格式,如yyyy-MM-ddHH:mm:ss并设置时区。而@DateTimeFormat则是在接收前端数据时进行格式校验,支持如yyyy-MM-ddHH:mm:ss等不同的日期时间格式。

 @JsonFormat:用于(后端---->前端)提交数据时转换时使用,加在参数或者属性变量上或该属性get方法上面

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")

 

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.2</version>
</dependency>

@DateTimeFormat:用于(前端--->后端)提交数据时使用,加在参数或者属性变量上或该属性get方法上面

@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")

 相关时间参数标签:

date时间格式各参数标注 

date("Y-m-d H:i:s"); 显示的格式: 年-月-日 小时:分钟:秒

相关时间参数:

a - "am" 或是 "pm" 
A - "AM" 或是 "PM" 
d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31" 
D - 星期几,三个英文字母; 如: "Fri" 
F - 月份,英文全名; 如: "January" 
h - 12 小时制的小时; 如: "01" 至 "12" 
H - 24 小时制的小时; 如: "00" 至 "23" 
g - 12 小时制的小时,不足二位不补零; 如: "1" 至 12" 
G - 24 小时制的小时,不足二位不补零; 如: "0" 至 "23" 
i - 分钟; 如: "00" 至 "59" 
j - 几日,二位数字,若不足二位不补零; 如: "1" 至 "31" 
l - 星期几,英文全名; 如: "Friday" 
m - 月份,二位数字,若不足二位则在前面补零; 如: "01" 至 "12" 
n - 月份,二位数字,若不足二位则不补零; 如: "1" 至 "12" 
M - 月份,三个英文字母; 如: "Jan" 
s - 秒; 如: "00" 至 "59" 
S - 字尾加英文序数,二个英文字母; 如: "th","nd" 
t - 指定月份的天数; 如: "28" 至 "31" 
U - 总秒数 
w - 数字型的星期几,如: "0" (星期日) 至 "6" (星期六) 
Y - 年,四位数字; 如: "1999" 
y - 年,二位数字; 如: "99" 
z - 一年中的第几天; 如: "0" 至 "365"

<think>我们正在讨论Jackson库中的@JsonFormat注解。用户想知道这个注解通常与哪个注解或配置一起使用。 根据Jackson的常见用法,@JsonFormat注解主要用于控制日期、时间、数字等类型的序列化反序列化格式。它通常与以下注解或配置配合使用: 1. **@JsonProperty**:用于指定属性在JSON中的字段名。有时我们需要同时指定字段名格式(比如日期格式),因此这两个注解可能会一起使用。 2. **@JsonInclude**:用于控制序列化时包含属性的策略(如非空才包含)。当同时需要控制格式包含条件时,这两个注解会一起使用。 3. **全局配置**:在ObjectMapper上配置的日期格式等。@JsonFormat注解可以覆盖全局配置,因此当需要为特定属性指定不同于全局的格式时,使用@JsonFormat。 4. **@JsonSerialize****@JsonDeserialize**:用于指定自定义序列化器反序列化器。当@JsonFormat不能满足需求时,可能会使用自定义序列化,但@JsonFormat通常更简单。 特别地,对于日期/时间类型,@JsonFormat最常用来指定日期格式(pattern)时区(timezone)。例如: ```java @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTime; ``` 另外,Jackson还提供了@JsonPropertyOrder注解(用于指定属性序列化的顺序),但@JsonFormat没有直接配合关系。 因此,回答中应强调: - 最常配合的是日期格式时区设置,通常单独使用即可满足需求。 - 有时会与@JsonProperty(指定字段名)或@JsonInclude(控制包含规则)一起使用。 同时,注意引用[2]中提到了@JsonFormatObjectMapper的使用,我们可以引用这个例子。 回答结构: 1. 简要介绍@JsonFormat的用途。 2. 列举常配合使用的注解配置,并举例说明。 3. 给出一个完整的代码示例。 注意:用户的问题是关于配套使用的注解或配置,所以重点在“配套”上。</think>### Jackson `@JsonFormat` 注解的常见搭配用法 `@JsonFormat` 注解主要用于控制日期/时间类型数值类型的序列化格式,在 Jackson 库中通常与以下注解或配置配合使用: #### 1. **与 `@JsonProperty` 搭配使用(最常用)** 用于同时指定字段的 JSON 属性名序列化格式: ```java public class User { @JsonProperty("create_time") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createdAt; } ``` - `@JsonProperty` 定义 JSON 字段名称(`create_time`) - `@JsonFormat` 指定日期格式时区(强制转为 `"2023-01-01 12:00:00"` 格式)[^1] #### 2. **与全局 `ObjectMapper` 配置结合** 当需要覆盖全局配置时使用: ```java ObjectMapper mapper = new ObjectMapper(); mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd")); // 全局配置 public class Event { @JsonFormat(pattern = "HH:mm:ss") // 局部覆盖为时间格式 private Date startTime; } ``` - 全局配置默认日期格式为 `yyyy-MM-dd` - `@JsonFormat` 为特定字段覆盖为时间格式(`"12:30:00"`) #### 3. **与 `@JsonInclude` 搭配** 控制空值的序列化行为: ```java @JsonInclude(JsonInclude.Include.NON_NULL) public class Order { @JsonFormat(pattern = "yyyy/MM/dd") private Date deliveryDate; // 为空时不序列化 } ``` #### 4. **与枚举序列化配合** 控制枚举值的序列化格式: ```java public enum Status { @JsonFormat(shape = JsonFormat.Shape.NUMBER) PENDING, // 序列化为 0 APPROVED // 序列化为 1 } ``` #### 完整使用示例 ```java public class ApiResponse { @JsonProperty("req_id") private String requestId; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date timestamp; @JsonInclude(JsonInclude.Include.NON_EMPTY) private List<Data> items; } // 序列化结果 { "req_id": "req_123", "timestamp": "2023-05-20 14:30:00", // items 为空时自动忽略 } ``` #### 关键参数说明 | 参数 | 作用 | 示例值 | |--------------|-----------------------------|----------------------------| | `pattern` | 定义日期/时间格式 | `"dd/MM/yyyy"` | | `shape` | 控制序列化形状(数字/字符串) | `JsonFormat.Shape.NUMBER` | | `timezone` | 指定时区 | `"Asia/Shanghai"` | | `locale` | 指定地区格式 | `"zh_CN"` | > **最佳实践**: > 1. 日期字段**必须**搭配 `timezone` 参数避免时区问题 > 2. 优先使用 `pattern` 而非默认格式保证一致性 > 3. 数值类型用 `shape = NUMBER` 避免意外转为字符串[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值