未调用自定义弹簧验证器

时间:2016-07-29 11:06:48

标签: spring

我已经创建了一个适用于对象列表的自定义约束验证器。不幸的是,它似乎没有被调用,当我有一个包含列表并在列表中带有注释的包装类时它起作用。

这是运行良好的代码

public class wrapper {
    @ValidMyObjectList
    List<MyObject> myObjects;
    ...
}

但是现在我已经摆脱了包装类,并在控制器方法中为参数添加了注释。

这是控制器

@RequestMapping(value = "", method = RequestMethod.POST)
  public List<MyObject> stopCheque(
      @ValidMyObjectList @RequestBody final List<MyObject> myObjects,
      final HttpServletResponse httpServletResponse) {

    ....
}

这里是约束注释

@Constraint(validatedBy = MyObjectListValidator.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD, ElementType.PARAMETER })
public @interface MyObjectList {

  Class<?>[] groups() default {};

  String message() default "";

  Class<? extends Payload>[] payload() default {};
}

验证器本身的一部分

public class MyObjectListValidator implements
    ConstraintValidator<MyObjectList, List<MyObject>> {


  @Override
  public void initialize(final MyObjectList myObjectList) {
  }

  @Override
  public boolean isValid(final List<MyObjectList> myObjectLists, final ConstraintValidatorContext cxt) {
    ...
}

非常感谢任何帮助。感谢

1 个答案:

答案 0 :(得分:3)

添加到Spring配置类:

@Bean 
public MethodValidationPostProcessor methodValidationPostProcessor() {
     return new MethodValidationPostProcessor(); 
}

并将@Validated添加到控制器类。