2016-12-05 98 views
0

我試圖驗證使用Hibernate Validator的請求對象。基於活動驗證組的相同字段上的不同驗證

作爲一個簡單示例,假定我試圖驗證的對象的類別具有B bObj字段,其​​中B是另一個具有String name字段的類。

由於這個原因,我已經實現了我自己定製的Constraint Annotations鏈接到自定義MyValidator implements ConstraintValidator類。

DTO類

@AclassValidate(groups = {Operations.Insert.class, Operations.Update.class javax.validation.groups.Default.class}) 
public class A { 

    @BclassValidate(groups = {Operations.Insert.class, Operations.Update.class}) 
    private B bObj; 

    // setters, getters 
} 

我的終點法簽名(其中驗證器被調用,並且有源組被設置):

@PostMapping("/test") 
public A createA(
     @Validated(value = Operations.Insert.class) 
     // @Validated(value = Operations.Update.class) 
     @RequestBody A a 
) 

我的驗證器類

public class BclassValidator implements ConstraintValidator<BclassValidate, B> { 

    public void initialize(BclassValidate constraintAnnotation) { 
    } 

    public boolean isValid(B b, ConstraintValidatorContext constraintContext) { 

     boolean valid = true; 

     // Get active group here 
     activeGroup = ..? 
     if (activeGroup == Operations.Insert.class) { 
      // check if b.getName() equals to "John" 
     } 
     else if (activeGroup == Operations.Update.class) { 
      // check if b.getName() equals to "Doe" 
     } 

     return valid; 
    } 
} 

我想實現的是對基於活動組的相同字段應用不同的驗證。活動組是組,設置爲@Validated註釋。問題是我如何檢索活動組以便根據其值應用不同的驗證?

回答

0

您無法從約束驗證程序中獲取當前驗證的組。

相反,你應該把你的約束分成幾個,你的情況一個用於插入,另一個用於更新。然後,您可以將這些單獨的約束分配給一個驗證組。