所以,我尝试为我的方法定制一个验证器。这个:
@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方法。
我哪里做错了?
1条答案
按热度按时间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