如何在Spring Boot中全局配置@DateTimeFormat模式?
在我的Spring Boot" title="Spring Boot">Spring Boot应用程序中,我有一些接受日期作为查询参数的控制器:
@RestControllerpublic 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中配置行为的错误方法。
所以我的问题是:如何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中的提案合并后,可以使用配置属性来设置此设置。
以上是 如何在Spring Boot中全局配置@DateTimeFormat模式? 的全部内容, 来源链接: utcz.com/qa/434284.html