JCP 全稱 Java社區進程 (Java Community Process,JCP)。java
JCP 是一個開放性的國際技術標準組織,職責是發展和更新 Java 技術規範。由24個成員組成的執行委員會則是該組織的最高決策機構,負責規劃 Java 的技術演進方向。web
JSR 全稱 Java 規範提案 (Java Specification Requests,JSR)。spring
是指向JCP提出新增一個標準化技術規範的正式請求。任何人均可以提交JSR,以向Java平臺增添新的API和服務。api
JSR已成爲Java界的一個重要標準。安全
Bean Validation 顧名思義是對 java Bean 的校驗,目前爲止,Java 對 Bean 的校驗有3個規範。bash
JSR-303規範官網 JSR-303 : Bean Validation,是一項 java 規範提案,而且於2009年11月16日經過提案,正式成爲一項 java 規範。mvc
JSR 349 : Bean Validation 1.1,故名思議,是 Bean Validation 的 1.1 版本,於2013年5月24日經過提案,正式成爲一項 java 規範。maven
JSR-380規範官網post
JSR 380 : Bean Validation 2.0,故名思議,是 Bean Validation 的 2.0 版本,於2017年8月21日經過提案,正式成爲一項 java 規範。
javax.validation 是 Java 官方提供的對 Bean Validation 規範的實現,它提供了 @NotBlank、@NotNull、@NotEmpty 等註解供咱們使用。
maven 座標以下
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
複製代碼
因爲 Bean Validation 有多個版本,所以 javax.validation 也提供了對於版本的實現,如圖
其中
Hibernate-Validator 是 Hibernate 提供的對 JSR-303 : Bean Validation規範的實現,它基於 javax.validation,並在它的基礎上提供了 @Range 、@Length 等註解。
參數校驗做爲web開發最基礎的需求,Spring 天然是對其進行了支持。Spring mvc 中就自帶 Hibernate-Validator 框架,用於對 Java bean 類型的參數進行校驗。
光有 Hibernate-Validator 還無論,由於參數若是不是 Java bean 就沒辦法校驗,所以 spring 增長了對普通參數類型的支持。
所以在使用 spring 框架進行參數校驗時,會使用到多方技術。這就是爲何用於參數校驗的註解,有的是來自 javax 、有的是來自 Hibernate、有的又來自 spring的緣由。
參考 使用 Hibernate-Validator 對 Java bean 類型進行參數校驗
對普通類型進行參數校驗是 spring 框架對 Hibernate-Validator 只能校驗 Java bean 的補充。通常用於參數很少的狀況(不必爲了一兩個參數,單獨封裝一個 java bean)。
這種狀況下,咱們能夠直接把校驗註解打在對應參數上,而後在 controller 上添加 @Validated 註解,這個註解就是 spring 對普通類型參數校驗的支持註解。
例子以下
參數校驗確定存在校驗不經過的狀況,校驗不經過時會拋出異常,雖然 Spring 對這些異常都進行了默認的處理,可是默認的處理方式並不安全,以下,暴露了不少不應暴露的信息,對於這些異常,咱們須要手動處理。
關於如何處理這些異常,請參考