繁体   English   中英

将自定义验证注释应用于参数

apply custom validation annotation to parameter

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有以下用于验证密码的类。

public class PasswordConstraintValidator implements ConstraintValidator<ValidPassword, String> {

    @Override
    public void initialize(ValidPassword constraintAnnotation) {
    }

    @Override
    public boolean isValid(String password, ConstraintValidatorContext context) {
        PasswordValidator validator = new PasswordValidator(Arrays.asList(

                // at least 8 characters
                new LengthRule(8, 30),

                // at least one upper-case character
                new CharacterRule(EnglishCharacterData.UpperCase, 1),

                // at least one lower-case character
                new CharacterRule(EnglishCharacterData.LowerCase, 1),

                // at least one digit character
                new CharacterRule(EnglishCharacterData.Digit, 1),

                // at least one symbol (special character)
                new CharacterRule(EnglishCharacterData.Special, 1),

                // no whitespace
                new WhitespaceRule()
        ));

        RuleResult result = validator.validate(new PasswordData(password));

        if (result.isValid()) {
            return true;
        }

        List<String> messages = validator.getMessages(result);
        String messageTemplate = messages.stream().collect(Collectors.joining(","));
        context.buildConstraintViolationWithTemplate(messageTemplate)
                .addConstraintViolation()
                .disableDefaultConstraintViolation();
        return false;
    }
}
@Documented
@Constraint(validatedBy = PasswordConstraintValidator.class)
@Target( {ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD, ElementType.LOCAL_VARIABLE, ElementType.TYPE_PARAMETER, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidPassword {
    String message() default "Invalid Password";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

为 class 中的字段添加 @ValidPassword 注释是可行的。 但是,当我尝试将注释添加到 function 中的参数时,验证器永远不会被调用/到达。

public void resetUserPassword(Integer userId, @ValidPassword String newPassword) {
}

在此处添加注释也不起作用:

@PostMapping("/user/resetPassword/{id}")
public ResponseEntity<?> resetUserPassword(@PathVariable("userId") Integer userId, @Valid @ValidPassword @RequestBody String newPassword) {
    userService.resetUserPassword(userId, newPassword)
    return ResponseEntity.ok().build();
}

我不认为我缺少任何依赖项,所以我不确定问题出在哪里。

问题暂未有回复.您可以查看右边的相关问题.
1 Java中的注释(参数)验证?

有什么方法可以验证Java中的注释有效性? 例如我可能有一个注释 我可以限制numbers从零开始并连续吗? (在上面的示例中,我编写了此签入注释的注释构造函数) 更新 注释用法的一些示例: ...

3 Java自定义验证批注

如何将课程变量传递给CustomValidation批注? 我收到一个错误消息,说课程必须是一个枚举常量表达式。 我也写了一个自定义的验证界面和验证器。 ...

4 自定义验证批注失败

创建了一个自定义验证批注,以检查两个弹簧形式字段是否相等。 密码验证: PasswordVerificationValidator: UserFormRegistration: 因此,如果将注释应用于UserFormRegistration类,则可以正常工作。 但 ...

5 ElementType参数的自定义注释

我有一个用例,需要检查对象是否不为null,然后只执行该方法,否则返回。 我当前的代码看起来像这样 我想做一个自定义注释,该注释可以应用于可以生成此样板的方法的参数。 因此,新代码如下所示: 我尝试了Lombok @NonNull,它执行相同的操作,但是如果参数为null ...

6 功能参数的自定义注释

我想制作一个函数并注释一个具有特定大小的参数,但是根据官方文档尚不清楚如何做到这一点。 结果类似于以下内容: 此处将data作为参数接收时应检查data 。 ...

2019-12-11 13:12:50 0 18   kotlin
7 方法参数的自定义注释

我试图使用自定义注释验证方法参数,但不会调用注释验证器。 注释 FieldValidator 通过主要方法进行测试 预期:成功调用注释 - 样本应显示在控制台中 ...

8 使用Java Annotation进行参数验证

据我所知,在Java中我们有参数验证解决方案。 我相信JAX-RS在验证和数据提取方面都有各种注释。 我的问题是,如果我想为独立的Java应用程序实现我自己的参数验证类,我怎样才能确保只有在验证了参数时才执行方法? 我使用Reflection来@LowerCaseCheck参数,然后对其进 ...

2013-09-06 11:33:57 3 274   java
9 Spring MVC注解验证自定义注解

我有一个@Password批注,用于验证输入的有效密码。 首先,我想先使用@NotEmpty进行检查,然后再调用@Password以获得更好的错误消息。 如果我使用@NotEmpty @Password字符串密码; 我将收到两个不同的验证错误。 我尝试使用组,但是属于该组的所 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM