[英]How to globally configure `@DateTimeFormat` pattern in Spring Boot?
我是我的 Spring Boot 應用程序,我有一些控制器接受日期作為查詢參數:
@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。
由於我有多個控制器使用日期作為查詢參數,因此我想為所有LocalDate
查詢參數配置此行為。 我嘗試過spring.mvc.date-pattern
屬性,但它似乎只適用於java.util.Date
。
所以在網上搜索之后,我想出的最好的方法是我從這個答案中采用的ControllerAdvice
。 此解決方案的問題是,無法再處理Optional<LocalDate>
。 感覺這是在 Spring Boot 中配置行為的錯誤方式。
所以我的問題是:如何在 Spring Boot 中以慣用的方式全局配置用作查詢參數的LocalDate
模式?
這目前不容易實現(例如通過設置簡單的配置屬性),請參閱#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中的提案被合並后,可以使用配置屬性來設置它。
@britter:謝謝。
spring.mvc.date-format= # Date format to use. For instance, dd/MM/yyyy
spring.mvc.date-format= # Date format to use. For instance, dd/MM/yyyy
適用於 Spring Boot 2.1.0.x
請參閱#SPRING MVC (WebMvcProperties)屬性。
更新:但它不適用於 Spring Data Rest 參數......
您可以使用spring.mvc.format.date 、 spring.mvc.format.time
和spring.mvc.format.date-time
例如:
spring.mvc.format.time=HH:mm:ss
spring.mvc.format.date=iso
spring.mvc.format.date-time=iso-offset
如上例所示,您可以使用 spring boot 2.4.1 中的快捷方式iso
和iso-offset
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.