本專欄全部案例基於Spring Boot 1.5.1進行講解,在Spring Boot 1.5.1中使用的校驗器是hibernate validator 5.3.4 Final。java
hibernate validator 5.3.4 Final是JSR 303 Bean Validation 1.1的具體實現。web
本文跟你們初步瞭解一下hibernate validator的一些使用技巧。spring
hibernate validator主要使用註解的方式對bean進行校驗,第一個例子:json
package com.learn.validate.domain; import javax.validation.constraints.Min; import org.hibernate.validator.constraints.NotBlank; public class Student { //在須要校驗的字段上指定約束條件 @NotBlank private String name; @Min(3) private int age; @NotBlank private String classess; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getClassess() { return classess; } public void setClassess(String classess) { this.classess = classess; } }
而後在controller中能夠這樣調用,加上@Validated註解便可。segmentfault
package com.learn.validate.controller; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.learn.validate.domain.Student; @RestController public class ValidateController { @RequestMapping(value="testStudent") public void testStudent(@Validated Student student,BindingResult bindingResult) { // } }
若是校驗失敗,默認會返回Spring boot 框架的出錯信息。是一個json串,裏面有詳細的出錯描述。app
在上面的例子中,若是Student bean想要用於兩個不一樣的請求中,每一個請求有不一樣的校驗需求,例如一個請求只須要校驗name字段,一個請求須要校驗name和age兩個字段,那該怎麼作呢?
使用註解的groups屬性能夠很好的解決這個問題,以下所示:框架
package com.learn.validate.domain; import javax.validation.constraints.Min; import org.hibernate.validator.constraints.NotBlank; public class Student { //使用groups屬性來給分組命名,而後在須要的地方指定命令便可 @NotBlank(groups=NAME.class) private String name; @Min(value=3,groups=AGE.class) private int age; @NotBlank private String classess; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getClassess() { return classess; } public void setClassess(String classess) { this.classess = classess; } public interface NAME{}; public interface AGE{}; }
根據須要在@Validated屬性中指定須要校驗的分組名,能夠指定1到多個。指定到的分組名會所有進行校驗,不指定的不校驗。dom
package com.learn.validate.controller; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.learn.validate.domain.Student; import com.learn.validate.domain.Student.AGE; import com.learn.validate.domain.Student.NAME; @RestController public class ValidateController { @RequestMapping(value="testStudent") public void testStudent(@Validated Student student,BindingResult bindingResult) { } @RequestMapping(value="testStudent1") public void testStudent1(@Validated(NAME.class) Student student,BindingResult bindingResult) { } @RequestMapping(value="testStudent2") public void testStudent2(@Validated({NAME.class,AGE.class}) Student student,BindingResult bindingResult) { } }
本文初步講解了hibernate validator的使用方式,相信各位看官老爺必定還想了解更多詳細內容和使用技巧。jsp
??當面講給你聽?? 講堂地址,新課促銷中,十一前都有折扣,只要你敢來,保你收貨滿滿?。spring-boot