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

2024-04-08

在我的 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我从此采用了answer https://stackoverflow.com/a/43726183/5391954。这个解决方案的问题是,无法处理Optional<LocalDate>不再了。感觉这是在 Spring Boot 中配置行为的错误方法。

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


目前这不容易实现(例如通过设置一个简单的配置属性),请参阅#5523 https://github.com/spring-projects/spring-boot/issues/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 https://github.com/spring-projects/spring-boot/pull/9930已合并。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Spring Boot 中全局配置`@DateTimeFormat`模式? 的相关文章

随机推荐

  • 以编程方式设计 GUI - 嵌套布局和多个小部件 (Qt) 的良好实践

    我有兴趣更好地理解Qt为此我想see 如何仅以编程方式完成嵌套布局和多个小部件 GUI 的相对复杂示例 即不使用 Qt Creator 的设计 我见过几个示例代码仅演示非常简单的布局 并且几乎总是不使用头文件 事实上我见过的大多数例子 du
  • Skip 的性能(以及类似功能,如 Take)

    我刚刚看了一下源代码Skip Take NET Framework 的扩展方法 在IEnumerable
  • WPF相当于ActiveControl?

    在表单中 我可以简单地使用 ActiveControl name 来获取活动控件的名称 然而在 WPF 中这不起作用 与 Activecontrol name 等效的 WPF 命令是什么 我会选择 C 或 VB 无论哪种方式 谢谢你 有几种
  • 实体框架、AutoMapper、处理实体更新

    我最近才开始使用Entity Framework 1 0 相信我已经开始感受到大家都在谈论的痛苦了 我正在尝试使用最佳实践 因此我有一组 DTO 可以通过 AutoMapper 映射到我的实体或从我的实体映射 真正的问题是当我尝试更新对象时
  • 正则表达式,始终在末尾替换字符串的一部分

    我正在尝试替换一个字符串 以便该网址的一部分始终到达末尾 google com to the end faa google com to the end faa fee google com to the end faa fee fii 使
  • Django中获取特定半径内的所有点

    对于 Google 地图应用程序 我需要创建一个查询 在给定每个点的纬度 经度的情况下 选择数据库中位于给定纬度 经度特定半径范围内的所有项目 在 Django ORM 中是否有一种有效的方法来做到这一点 到目前为止 我想出的最好方法是选择
  • 有条件的 Spring 配置

    是否可以在 Spring 配置中使用条件表达式 例如 我想定义两个不同的连接器 如下所示 连接器 1
  • Maven:子模块无法继承父模块的依赖项

    这是我的父母 pom
  • EditText 视图返回 null

    我有两个活动 一个 主页 片段活动和一个普通的 选项 活动 在我的主页片段活动中 我尝试使用从选项活动检索的数据来更新 EditText 视图 不幸的是 由于某种原因 片段活动无法检测到我的视图以进行更新 我不太清楚为什么 这是我的功能 u
  • Android:可以获得自定义 R.id

    是否可以让 android 给我一个自定义 id 例如 如果我已经在 xml 中定义 R id some layout R drawable some drawable 有没有这样的功能 R custom id a custom id 这样
  • 如何使用 CSS 和 Javascript 缩小 HTML?

    我有一个 html 文档 其中包含 CSS 和 Javascript 无外部文件 有没有一些在线工具可以minify文档和Javascript 的占用空间非常小 我看到许多脚本有点不可读 其中所有变量和函数名称都被替换为单字母名称等 请指教
  • Java 错误:找到接口...但需要类

    我的代码中出现了一个奇怪的运行时错误 Found interface SomeInterface but class was expected 怎么会发生这种事呢 接口如何实例化 Update 回应一些答案 我正在针对同一组库进行编译和运行
  • Int 不符合协议“StringLiteralConvertible”

    我试图在天气应用程序中解析 json 但遇到了一个我无法克服的障碍 我确实在以下代码中收到错误 类型 int 不符合协议 StringLiteralConvertible 我尝试过转换 jsonResult main 但这确实给出了错误 后
  • 重命名列表框中的项目

    我想重命名列表框中选定的项目 我怎样才能做到这一点 谢谢 编辑 几年后重新审视这个问题 以下是根据您使用的 UI 框架执行此操作的方法 这假设您想要更改所选文本 ASP Net Web 表单 protected void ChangeLis
  • 忽略绝对定位视图上的触摸以允许在底层 ScrollView 上滚动

    我有一个绝对位于 ScrollView 上方的视图 即使我在顶视图内开始触摸 我也希望能够滚动 我尝试过设置onStartShouldSetResponder and onMoveShouldSetResponder在查看到false但它仍
  • 如何监控 TCP 连接的 cwnd 和 ssthresh 值? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望在通过套接字连接发送或接收数据包时确定这些值 有没有现有的工具可以做到这一点 The ss http linux die net m
  • 重新渲染图像视图之间出现白色闪光

    不确定这是否是一个大问题 但我不完全确定是否存在解决方案 创建幻灯片样式元素时 点击后图像会更改为另一个图像 已使用 React Native 的图像预取器预取 当屏幕重新渲染时会出现白色闪烁 我认为 这个问题有具体的解决办法吗 我不明白像
  • 检查Android上是否已经创建数据库

    Android 中如何知道数据库是否已创建 有人有例子吗 you will find the data in DDMS gt 数据 数据 your package name database your database name 看第二张图
  • 如何以编程方式添加容器视图

    容器视图可以通过界面编辑器轻松添加到故事板中 添加后 容器视图具有占位符视图 嵌入转场和 子 视图控制器 但是 我无法找到以编程方式添加容器视图的方法 事实上 我什至找不到一个名为UIContainerView or so Containe
  • 如何在 Spring Boot 中全局配置`@DateTimeFormat`模式?

    在我的 Spring Boot 应用程序中 我有一些控制器接受日期作为查询参数 RestController public class MyController GetMapping public ResponseEntity