@JsonFormat(shape = JsonFormat.Shape.STRING) 与 Jackson2ObjectMapperBuilderCustomizer哪个优先
时间: 2024-12-30 11:32:40 浏览: 104
### 配置 JSON 序列化优先级
在 Spring Boot 中配置 JSON 序列化时,`@JsonFormat` 和 `Jackson2ObjectMapperBuilderCustomizer` 的优先级有所不同。
对于字段级别的格式设置,`@JsonFormat` 注解具有较高的优先级。此注解允许开发者直接在实体类的字段上指定日期时间或其他复杂对象的序列化格式[^1]:
```java
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
```
而 `Jackson2ObjectMapperBuilderCustomizer` 则是在全局范围内定制 Jackson 的行为。这种方式通常用于应用程序启动时初始化 ObjectMapper 实例,并可以覆盖默认的行为或添加通用的序列化/反序列化特性[^2]:
```java
@Bean
public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
return builder -> builder.simpleDateFormat("yyyy-MM-dd");
}
```
当两者都存在时,在具体字段上的 `@JsonFormat` 设置会优先于由 `Jackson2ObjectMapperBuilderCustomizer` 所设定的全局规则。这是因为 `@JsonFormat` 是针对特定字段的具体指示,它能够更精确地控制单个属性的表现形式;相反,`Jackson2ObjectMapperBuilderCustomizer` 提供的是更为广泛的应用范围内的默认选项。
因此,在实际应用中如果希望某些特殊字段遵循不同于其他部分的数据格式,则应使用 `@JsonFormat` 来确保这些特殊情况得到妥善处理。而对于大多数情况下的一致性要求,则可以通过 `Jackson2ObjectMapperBuilderCustomizer` 进行统一管理。
阅读全文
相关推荐

















