hibernate 使用Spring的类的自定义验证器

quhf5bfb  于 2023-02-13  发布在  Spring
关注(0)|答案(1)|浏览(155)

所以,我尝试为我的方法定制一个验证器。这个:

@PostMapping("/person")
    public Person create(@Validated(value = IPersonValidator.class) @RequestBody Person person, Errors errors) {
        LOGGER.info("Creating a person with the following fields: ");
        LOGGER.info(person.toString());

        if (errors.hasErrors()) {
            LOGGER.info("ERROR. Error creating the person!!");
            return null;
        }

        //return personService.create(person);
        return null;
    }

这是我的Validator类:

@Component
public class PersonValidator implements Validator, IPersonValidator {

    @Override
    public boolean supports(Class<?> clazz) {
        return Person.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        Person person = (Person) target;
        if (person.getName() == null || person.getName().trim().isEmpty()) {
            errors.reject("name.empty", "null or empty");
        }
    }
}

我的接口:

public interface IPersonValidator {
}

我的班级:

@Entity
@Table(name = "persons")
@Data
@Getter
@Setter
@NoArgsConstructor
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "person_sequence")
    @SequenceGenerator(name = "person_sequence", sequenceName = "person_sequence", allocationSize = 1)
    @Column(name = "id")
    private Long id;
    //@NotBlank(message = "Name cannot be null or empty")
    @Column(name = "name")
    private String name;
    @NotBlank(message = "Lastname cannot be null or empty")
    @Column(name = "last_name")
    private String lastName;
    @Column(name = "last_name_2")
    private String lastName2;

    public Person(String name, String lastName, String lastName2) {
        this.name = name;
        this.lastName = lastName;
        this.lastName2 = lastName2;
    }
}

我所期望的是让它进入validate方法,因为我对我想要的类使用了注解(@Validate)。我也尝试了使用@Valid注解,但它仍然不会进入我的自定义validate方法。
我哪里做错了?

az31mfrm

az31mfrm1#

此代码@Validated(value = IPersonValidator.class)用于验证的"分组"。Yoy告诉验证器只有这些约束条件与groups = {IPersonValidator.class}有效。
要更好地理解自定义验证器,请参见:https://www.baeldung.com/spring-mvc-custom-validator
编辑:
此代码@Validated(value = IPersonValidator.class)没有使用您的验证程序。来自@Validated documantation:
value()指定一个或多个验证组,以应用于由该注解启动的验证步骤。
验证组用于打开/关闭数据类中某些字段的某些验证。请在此处查看更多信息:https://www.baeldung.com/javax-validation-groups
为了创建你自己的自定义验证,你必须为这个注解创建自定义约束注解和自定义验证器。这个自定义约束注解你可以在数据类中的一些字段上使用。我强烈推荐阅读这篇https://www.baeldung.com/spring-mvc-custom-validator

相关问题