JPA,Hibernate验证程序-电子邮件验证程序不适用于String

vlc*_*cik 3 hibernate-validator bean-validation spring-data-jpa

我正在尝试找出如何在控制器中验证DTO

堆栈:Spring boot 1.5.4,Spring Data JPA,Hibernate Validation 5,PostgreSQL

问题是我仍然遇到有关缺少验证器的异常情况。

有什么线索吗?

javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.Email' validating type 'java.lang.String'. Check configuration for 'email'
    at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.throwExceptionForNullValidator(ConstraintTree.java:227) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final]
    at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getConstraintValidatorNoUnwrapping(ConstraintTree.java:308) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final]
    at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getConstraintValidatorInstanceForAutomaticUnwrapping(ConstraintTree.java:242) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final]
    at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getInitializedConstraintValidator(ConstraintTree.java:163) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final]
    at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:116) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final]
    at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:87) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final]
    at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:73) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final]
    at org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraint(ValidatorImpl.java:616) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final]
Run Code Online (Sandbox Code Playgroud)

DTO

public class CreateUserDto {

    @NotEmpty
    private String name;

    @Email
    @NotEmpty
    private String email;

    private String password;

    private String address;

    private String phone;

    @NotNull
    private Role role;
}
Run Code Online (Sandbox Code Playgroud)

控制者

@PostMapping(value = "/users", consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
@ResponseStatus(HttpStatus.CREATED)
public UserDto register(@Valid @RequestBody CreateUserDto user) {
    return userService.register(user);
}
Run Code Online (Sandbox Code Playgroud)

Gui*_*met 5

我怀疑您正在将Bean Validation 2.0与仅支持BV 1.1的Hibernate Validator 5.4一起使用。@Email约束是在2.0中添加到规范中的-在此之前,它只是HV特定的约束。

您可能已向Validation-api 2.0添加了依赖项。

所以:

  • 回到BV 1.1,然后需要使用特定于Hibernate Validator的@Email约束(来自org.hibernate.validator.constraints包);
  • 或将HV升级到6.0(推荐),并保留BV 2.0和javax.validation @Email约束。