spring-data-jpa 验证以字符串形式接收的日期

shstlldc  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(201)

当 Postman 发出请求时,我需要检查收到的日期是否为“yyyy-mm-dd”格式,然后将其发送到我的服务。有没有方法用字符串来做这件事?
示例:
我的控制器:

@GetMapping("/by-date")
public ResponseEntity<List<ResponseRet>> getByDate(@RequestParam(required = false) String dateGte,
                                                              @RequestParam(required = false) String dateLte) {
    List<ResponseRet> responseRet = searchService.findByDate(dateGte, dateLte);
    return ResponseEntity.ok(responseRet);
}

在这种情况下,我需要在控制器或服务中执行此检查

hsvhsicv

hsvhsicv1#

在您的服务类中,您可以尝试将String解析为LocalDate

public List<ResponseRet> findByDate(String dateGte, String dateLte) {
    try {
        LocalDate.parse(dateGte);
        LocalDate.parse(dateLte);
    } catch (DateTimeParseException ex) {
        // log, throw your custom exception with 400 http response code or whatever
    }
    // other code;
}

解析时,LocalDate使用默认的DateTimeFormatter.ISO_LOCAL_DATE-日期,如“2022-08-24”。
如果要使用其他格式进行解析,请创建DateTimeFormatter的示例并使用它:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/mm/dd");
LocalDate.parse(dateGte, formatter);

您也可以将方法的参数类型更改为LocalDate,并在控制器级别进行验证:

@GetMapping("/by-date")
public ResponseEntity<List<ResponseRet>> getByDate(
                       @RequestParam(required = false) @Valid @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate dateGte,
                       @RequestParam(required = false) @Valid @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate dateLte) {
    List<ResponseRet> responseRet = searchService.findByDate(dateGte.toString(), dateLte.toString());
    return ResponseEntity.ok(responseRet);
}

相关问题