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

在我的Spring Boot" title="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中配置行为的错误方法。

所以我的问题是:如何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

回到顶部