2017-05-30 466 views
0

我正在Java中實現一個API網關,其中請求對象包含大量字段和子對象。有許多屬性是required(不應該爲空),有些是可選的。代碼在Karaf中運行,並且正在使用藍圖,所以一些基於Spring的機制是可能的,但我們現在並沒有從Spring中使用太多(儘管我熟悉各種Spring框架)。在Java中,使用@NonNull註釋屬性驗證對象的最佳方法

我知道Eclipse @NonNull註釋,我可以將該註釋添加到需要返回非空值的getter方法。

我希望能夠做的是在請求對象上運行可重用的方法,該方法將確定是否存在任何約束違規並返回人類可讀的錯誤消息(或其他內容)。

似乎有不同的方法來做到這一點,但我不確定什麼框架策略在我的情況下是有意義的。例如,有commons-validator,但這似乎是特定於網頁表單。我還看到了一些hibernate validator的文檔,但是這似乎不適用於此。

+0

註釋的控制器的方法,用'Objects.requireNonNull()一起'爲每一個參數方法。如果不滿足前提條件,將會以NPE的速度快速失敗。 –

+0

對不起,我需要更多信息。 –

+0

你能分享一些示例代碼嗎? –

回答

1

你可以使用oracle驗證API JSR-303,它是獨立的框架,可以在基於web和非基於web的應用程序中使用,Hibernate爲該JSR-303提供實現。 可以包括依賴在你按照pom.xml文件

<dependency> 
    <groupId>javax.validation</groupId> 
    <artifactId>validation-api</artifactId> 
    <version>1.1.0.Final</version> 
</dependency> 

,並在你bean對象實施

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-validator</artifactId> 
    <version>5.2.1.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-validator-annotation-processor</artifactId> 
    <version>5.2.1.Final</version> 
</dependency> 

你可以使用註解像@NotEmpty@NotNull@Range .... 也可以配置每個註釋如您所願,例如您可以添加自定義消息到@NotNull註釋,如

@NotNull(message = "First Name cannot be null") 
private String firstName; 

審定工作得註釋實體@Valid和另一參數在開始時添加到型BindingResult

@RequestMapping(value = "/addUser", method = RequestMethod.POST) 
public String addUser(@Valid User user, BindingResult result) { 

     if (result.hasErrors()) { 
      return "errorPage"; 
     } else { 
      return "Done"; 
     } 
    } 
+0

我沒有使用彈簧請求處理,但大部分仍然適用。 –