我有一个包含两个arraylist和另一个属性的类 Package 器:
public class Wrapper<T, E> {
private List<T> toInsert = new ArrayList<>();
private List<T> toUpdate = new ArrayList<>();
private Set<E> toDelete = new HashSet<>();
// getter setter ....
}
我有一个班级:
public class UserDto {
private long id;
private LocalDateTime createdDate;
@NotBlank
private String registrationNumber;
@NotBlank
private String firstName;
@NotBlank
private String lastName;
@NotBlank
private String email;
@NotBlank
}
我创建一个验证器:
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {CustomerLocationValidator.class})
@Documented
public @interface ValidCustomerLocation {
String message() default "Invalid List userDto";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
验证程序注解的实现:
public class CustomerLocationValidator implements ConstraintValidator<ValidCustomerLocation, Wrapper<UserDto, String>> {
@Autowired
Validator validator;
@Override
public boolean isValid(Wrapper<UserDto, String> value, ConstraintValidatorContext constraintValidatorContext) {
boolean isValid = true;
final Set<ConstraintViolation<UserDto>> constraintViolations = new HashSet();
value.getToInsert().forEach(userDto -> constraintViolations.addAll( validator.validate(userDto)) );
if (!CollectionUtils.isEmpty(constraintViolations)) {
constraintValidatorContext.disableDefaultConstraintViolation();
for (ConstraintViolation<UserDto> violation : constraintViolations) {
constraintValidatorContext.buildConstraintViolationWithTemplate(violation.getMessageTemplate()).addConstraintViolation();
}
isValid = false;
}
return isValid;
}
}
控制器中的方法:
@PostMapping
public ResponseEntity<Void> save(
@RequestBody @ValidCustomerLocation Wrapper<UserDto, String> itemsUsers) {}
在这个controller中,我试图发送无效的数据,但是注解validcustomerlocation没有捕捉到错误,我尝试使用@valid,但是我有同样的问题
暂无答案!
目前还没有任何答案,快来回答吧!