用于验证dto的csutom注解包含两个使用java验证和spring引导的列表

gcmastyq  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(207)

我有一个包含两个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,但是我有同样的问题

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题