gpt4 book ai didi

java - 如何在 Spring Boot 中全局配置 `@DateTimeFormat` 模式?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:33:36 26 4
gpt4 key购买 nike

我是我的 Spring Boot 应用程序,我有一些接受日期作为查询参数的 Controller :

@RestController
public class MyController {

@GetMapping
public ResponseEntity<?> getDataByDate(
@RequestParam(value = "date") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
final LocalDate date) {
return ResponseEntity.ok();
}
}

效果很好,我什至可以使用 @RequestParam(value = "date", required = false) 将参数标记为可选然后使用 Optional<LocalDate> . Spring 将处理所有这些,并在缺少参数时传递一个空的 Optional。

因为我有几个 Controller 使用日期作为查询参数,所以我想为所有 LocalDate 配置此行为查询参数。我试过 spring.mvc.date-pattern属性,但它似乎只适用于 java.util.Date .

所以在网上搜索之后,我想到的最好的是 ControllerAdvice我采用了这个 answer .此解决方案的问题是,无法处理 Optional<LocalDate>了。感觉这是在 Spring Boot 中配置行为的错误方法。

所以我的问题是:如何全局配置 LocalDate 的模式在 Spring Boot 中以惯用的方式用作查询参数?

最佳答案

目前这不容易实现(例如通过设置一个简单的配置属性),参见 #5523 .到目前为止我找到的最佳解决方案是注册一个 Formatter<LocalDate> .这也适用于建模为 Optional<LocalDate> 的可选参数。 :

  @Bean
public Formatter<LocalDate> localDateFormatter() {
return new Formatter<LocalDate>() {
@Override
public LocalDate parse(String text, Locale locale) throws ParseException {
return LocalDate.parse(text, DateTimeFormatter.ISO_DATE);
}

@Override
public String print(LocalDate object, Locale locale) {
return DateTimeFormatter.ISO_DATE.format(object);
}
};
}

当我在 #9930 中提出建议时,可能可以使用配置属性来设置它已合并。

关于java - 如何在 Spring Boot 中全局配置 `@DateTimeFormat` 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45440919/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com