2016-07-29 72 views
0

我創建了一個自定義約束驗證程序,該驗證程序在對象列表上工作。不幸的是,它似乎沒有被調用,當我有一個包含列表的註釋的包裝類時,它工作。未調用自定義彈簧驗證程序

這是工作的罰款

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) { 
    ... 
} 

將不勝感激任何幫助的一部分。由於

回答

2

添加到您的Spring配置類:

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

,並添加@Validated到控制器類。