首页 > 解决方案 > Spring Boot将请求参数字段的日期格式更改为DTO

问题描述

我的控制器有一个GET接受大量查询参数的端点。因此,@QueryParam我没有创建多个,而是创建了一个CriteriaDTO以便对我们的 Mongo 数据库执行动态查询

我的控制器端点:

@GetMapping
public List<MyObject> getAll(@Valid CriteriaDTO criteriaDTO){
    return myObjectService.findAll(criteriaDTO);
} 

public class CriteriaDTO {

    private int offset = 0
    private int limit = 20
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate minDate

    // getters, setters ...
}

而且,我想传递 minDate 是具有以下格式的 URL,yyyy-MM-dd但我需要将其转换为以下格式yyyy-MM-dd'T'HH:mm:ss.SSS

我的问题是:是否有任何注释或其他东西可以接受第一种格式yyyy-MM-dd并自动将其转换为另一种格式?

要清楚,如果我拨打以下电话:

http://localhost:8080/api/myobject?minDate=2020-01-01

然后criteriaDTO.getminDate()将返回2020-01-01'T'00:00:00.000

谢谢你的帮助 :)

标签: javaspring-bootdatetimedtolocaldate

解决方案


您可以通过比搜索注释魔术解决方案更简单的方式来完成此操作。

只需在 CriteriaDTO 中为 LocalDateTime 添加一个额外的 getter:

public LocalDateTime getMinDateTime() {
    return this.minDate.atTime(0, 0, 0, 0);
}

并在需要时间而不是日期的任何地方使用它。


推荐阅读