有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用自定义验证的java输入验证

自定义注释,定义为https://dzone.com/articles/bean-validation-and-jsr-303

我们可以在控制器中使用@大写注释吗

例如

 @RestController

public class Abc {

@RequestMapping(value="/abc", method=RequestMethod.POST)

public String abc(@Capitalized @RequestParam(value="abc") String abc) {



}

}

我用这种方式使用,但它不起作用。知道它为什么不起作用吗

谢谢


共 (3) 个答案

  1. # 1 楼答案

    在annotation target中添加Parameter{},那么它就可以工作了

    例如:

    @Target(ElementType.PARAMETER)
    
  2. # 2 楼答案

    假设@Capitalized为:

    @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
    @Retention(RetentionPolicy.RUNTIME)
    @Constraint(validatedBy = CapitalizedValidator.class)
    @Documented
    public @interface Capitalized {
    
        String message() default "should be capital";
    
        Class<?>[] groups() default {};
    
        Class<? extends Payload>[] payload() default {};
    }
    

    您有一个约束验证impl,如下所示:

    public class CapitalizedValidator implements ConstraintValidator<Capitalized, String> {
    
        private String message;
        @Override
        public void initialize(Capitalized constraintAnnotation) {
            message = constraintAnnotation.message();
        }
    
        @Override
        public boolean isValid(String value, ConstraintValidatorContext context) {
            if (value == null) {
                return true;
            }
            String inUpperCase = value.toUpperCase();
    
            if (inUpperCase.equals(value)) {
                return true;
            }
    
            context.buildConstraintViolationWithTemplate(message);
    
            return false;
        }
    
    }
    

    然后用你的控制器试试这个:

    @Validated
    @RestController
    public class SampleController {
    
        @RequestMapping(method = RequestMethod.POST)
        public String post(@Capitalized @RequestParam("content") String content) {
            return content;
        }
    
    }
    
  3. # 3 楼答案

    在应用程序中包含以下代码后。java,运行良好

    @Bean
        public Validator validator() {
    return new LocalValidatorFactoryBean();
     }
    
      @Bean
       public MethodValidationPostProcessor methodValidationPostProcessor() {
    MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
    methodValidationPostProcessor.setValidator(validator());
    return methodValidationPostProcessor;
    

    }