2015-01-16 22 views
13

我驗證我的POJO的REST資源終點在新澤西州:自動級聯豆驗證遞歸,@Valid註釋

public class Resource { 
    @POST 
    public Response post(@NotNull @Valid final POJO pojo) { 
     ... 
    } 
} 

public class POJO { 
    @NotNull 
    protected final String name; 

    @NotNull 
    @Valid 
    protected final POJOInner inner; 

    ... 
} 

public class POJOInner { 
    @Min(0) 
    protected final int limit; 

    ... 
} 

這似乎很好地工作。

但是,@Min(0)註釋僅在字段inner具有@Valid註釋時才被驗證。將@Valid註釋添加到不是基元的每個字段並不合適。

有沒有辦法告訴bean驗證器自動遞歸地繼續驗證,即使沒有@Valid註釋存在?我想我的POJO是如下:

public class POJO { 
    @NotNull 
    protected final String name; 

    @NotNull 
    protected final POJOInner inner; 

    ... 
} 
+0

什麼Bean驗證運行時您正在使用? –

+0

我正在使用Hibernate驗證器。 –

回答

11

實際上,根據規範,增加@Valid正是這個用例。從JSR 303規範:

除支持實例驗證外,還支持驗證對象圖。圖形驗證的結果作爲一組統一的約束違規返回。 考慮這種情況,其中bean X包含Y類型的字段。通過使用@Valid註釋註釋字段Y,Validator將在驗證X時驗證Y(及其屬性)。

...

的@Valid註釋應用遞歸

+0

春天不會默認這樣做..我使用彈簧引導2.0.0.BUILD-SNAPSHOT –

+2

雖然這可能是真實的但它不能解釋是否有可能實現遞歸驗證而無需註釋所有成員,這是什麼OP要求.. – cen