我正在使用hibernate驗證器來做POJO驗證,同時我也創建了一些自定義的驗證。下面是一個例子:
/lombok注解
public class Address {
@NotNull // 標準
@State //自定義創建
字串國家。
}
我們有一個要求,即用特定的代碼而不是訊息來表示所有的驗證錯誤。為了實作這一目標,我們決定在我們使用的每個注釋中指定代碼。上面的例子現在看起來是這樣的:
/lombok注解
public class Address {
@NotNull(message="ERR_001")
@State(message="ERR_002")
字串國家。
}
但是我們對這種方法有一個問題。我們不能強制要求在注釋中一直提供一個訊息(在我們的例子中是錯誤代碼)。對于自定義注解來說,這仍然是可以的,因為我們沒有提供默認訊息,但是對于標準注解來說,我們有可能錯過它,如果我們不小心錯過了提供自定義訊息,那么就會默默地生成一個字串訊息。
是否有辦法強制要求在注釋中一直提供訊息。這可能會有助于實作一些一致性。
是否有辦法強制要求在注釋中一直提供訊息?
uj5u.com熱心網友回復:
就我所知,沒有辦法做到這一點。也許你最好的選擇是創建你自己的注釋,并使該屬性成為強制性的。
uj5u.com熱心網友回復:
Sevntu-Checkstyle為Checkstyle提供了額外的檢查,包括檢查注釋是否使用了所有必需的引數。
<模塊名稱="RequiredParameterForAnnotation">
<屬性名稱="annotationName" value="NotNull"/>
<屬性 name="requiredParameters" value="message"/>
</module>
uj5u.com熱心網友回復:
我無法找到一個好的方法來處理它。但現在我已經實作了一個測驗,讓我們對它進行一些控制。它不是最好的解決方案,但目前解決了這個問題。
我正在使用classgraph來讀取包內POJO類的所有注解,并在javax validations上進行過濾,如果默認的訊息來自javax.validation,那么我就將其添加到一個串列中。
之后在單元測驗中,我將檢查這個串列是否為空。
private List<String> getAnnotationProperties(String appliedOn, AnnotationInfoList annotationInfos) {
回傳 annotationInfos.stream()
.filter(annotationInfo -> annotationInfo.getName().contains("javax.validation.constraints"))
.filter(annotationInfo -> ((String) annotationInfo.getParameterValues().getValue("message")).contains("javax.validation.constraints"))
.map(annotationInfo -> annotationInfo.getName())
.collect(Collectors.toList())。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/308785.html
標籤:
