簡體   English   中英

休眠驗證器拋出異常 ValidationException: HV000028 for @Past annotation

[英]hibernate validator throws exception ValidationException: HV000028 for @Past annotation

我正在 Spring Boot 項目中使用休眠驗證器驗證實體。 我得到了 Date 驗證器 @Past 的一個例外。 我遇到了javax.validation.ValidationException: HV000028: Unexpected exception during isValid call

這是我在 gradle.build 文件中的依賴項

implementation 'org.springframework.boot:spring-boot-starter-validation'

以下我有一個類似的實體

@NoArgsConstructor
@Data
public class Person{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
  
    @Column(name = "FIRST_NAME")
    @NotEmpty(message = "ENTER REQUIRED FIELDS - FIRST NAME")
    private String firstName;
    @Column(name = "LAST_NAME")
    @NotEmpty(message = "ENTER REQUIRED FIELDS - LAST NAME")
    private String lastName; 
    @Column(name = "BIRTH_DATE")
    @Past(message = "PLEASE ENTER A VALID DATE ")
    private Date birthDate;    

}

這是日志跟蹤

2020-10-25 13:09:11.421 DEBUG 21952 --- [nio-8080-exec-5] o.s.web.servlet.DispatcherServlet        : Completed 500 INTERNAL_SERVER_ERROR```


我快速運行我的示例項目,其中所有內容都已配置,我認為日期格式是問題所在。 可用的默認格式是

  • yyyy-MM-dd'T'HH:mm:ss.SSSX
  • yyyy-MM-dd'T'HH:mm:ss.SSS
  • EEE, dd MMM yyyy HH:mm:ss zzz
  • yyyy-MM-dd

這是我如何做到的

控制器

@PostMapping(value = "test-person")
    public TestPerson testPerson(@Valid @RequestBody TestPerson testPerson) {
        return testPerson;
    }

    @Getter
    @Setter
    @NoArgsConstructor
    @Data
    public static class TestPerson {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer id;

        @Column(name = "FIRST_NAME")
        @NotEmpty(message = "ENTER REQUIRED FIELDS - FIRST NAME")
        private String firstName;
        @Column(name = "LAST_NAME")
        @NotEmpty(message = "ENTER REQUIRED FIELDS - LAST NAME")
        private String lastName;
        @Column(name = "BIRTH_DATE")
        @Past(message = "PLEASE ENTER A VALID DATE ")
        @NotNull
        private Date birthDate;

    }

    @ControllerAdvice
    public static class RestExceptionHandler {

        @ExceptionHandler(MethodArgumentNotValidException.class)
        public ResponseEntity<Object> handleAllExceptionMethod(MethodArgumentNotValidException ex, WebRequest requset) {
//             general response dump
            return ResponseEntity.badRequest().body(ex.getBindingResult().getAllErrors());
        }
    }

還要確保對於birthDate你不應該使用@NotEmpty而是使用@NotNull因為對於NotEmpty

length of character sequence is evaluated

這適用於與我有相同問題的任何人。 我的問題是 Date 對象來自 java.sql.Date。 我將它們更改為 java.util.Date 現在驗證有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM