【问题标题】:input validation using custom validation使用自定义验证的输入验证
【发布时间】:2018-03-18 02:33:37
【问题描述】:

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

我们可以在控制器中使用@Capitalized注解吗?

例如

 @RestController

public class Abc {

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

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



}

}

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

谢谢,

【问题讨论】:

  • 尝试在你的Abc类中添加@Validated

标签: java validation spring-boot


【解决方案1】:

在注解目标中添加ParameterElementType就可以了。

例如:

@Target(ElementType.PARAMETER)

【讨论】:

  • Sachin,是否需要任何配置更改才能像其他 JSR 验证工作一样工作,例如最小、尺寸等?
【解决方案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;
    }

}

【讨论】:

  • 谢谢,我的设置和你提到的一样。但它不起作用
  • 我找到了一些关于这个 here.... 的链接。不明白为什么需要 bean 配置?
  • 您能否在问题中包含依赖项的版本?即 spring-boot,hibernate-validator 版本?
【解决方案3】:

在 Application.java 中包含以下代码后,它工作正常。

@Bean
    public Validator validator() {
return new LocalValidatorFactoryBean();
 }

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

}

【讨论】:

    猜你喜欢
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2019-02-18
    • 1970-01-01
    • 2016-04-14
    相关资源
    最近更新 更多