@DateTimeFormat注解格式化本地时间为HH:MM不生效返回HH:MM:SS
问题根源
你注解用错场景了。@DateTimeFormat是Spring的入参绑定注解,只负责把请求里传入的时间字符串转换成LocalTime类型的字段值,完全不影响接口返回JSON时的序列化逻辑。接口返回时走的是JSON框架的默认序列化规则,LocalTime默认就会输出HH:mm:ss的完整时分秒格式,所以你加的这个注解根本管不到返回场景,自然达不到格式化出参的效果。
实现方式
根据项目用的JSON序列化框架选对应方案即可,SpringBoot默认用Jackson,优先参考前两个方案:
- 单字段格式化
在字段上补加Jackson的序列化格式注解,原来的@DateTimeFormat保留,用来处理入参转换,两个注解各司其职不冲突:@DateTimeFormat(pattern = HTConstants.TIME_FORMAT) @JsonFormat(pattern = "HH:mm") private LocalTime checkOutTime; - 全局统一格式化
如果项目里所有LocalTime类型字段都需要返回HH:mm格式,不用逐字段加注解,直接配置Jackson的全局序列化规则:@Configuration public class TimeFormatConfig { @Bean public Jackson2ObjectMapperBuilderCustomizer jacksonTimeCustomizer() { return builder -> builder.serializerByType(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm"))); } } - 如果项目用Fastjson做序列化
把@JsonFormat换成Fastjson的对应注解即可:@JSONField(format = "HH:mm") private LocalTime checkOutTime;
小提示:如果配置了全局格式化规则,就不需要在普通字段上重复加格式注解了,字段上的注解优先级高于全局配置,有特殊格式需求的字段单独加注解即可。
内容的提问来源于stack exchange,提问作者Stotra
相关产品推荐
相关产品推荐

