JSR-303 是 JAVA EE 6 中的一項子規(guī)范,叫做 Bean Validation,用于對 Java Bean 中的字段的值進行驗證。Hibernate Validator則是Hibdernate提供的一種對該規(guī)范的實現(xiàn)。
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比市南網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式市南網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋市南地區(qū)。費用合理售后完善,十載實體公司更值得信賴。
——即Hibernate Validator是用來做參數(shù)校驗。
使用Hibernate Validator提供的注解進行參數(shù)校驗
注解 | 釋義 |
---|---|
@Null | 必須為null |
@NotNull | 不能為null |
@AssertTrue | 必須為true |
@AssertFalse | 必須為false |
@Min | 必須為數(shù)字,其值大于或等于指定的最小值 |
@Max | 必須為數(shù)字,其值小于或等于指定的最大值 |
@DecimalMin | 必須為數(shù)字,其值大于或等于指定的最小值 |
@DecimalMax | 必須為數(shù)字,其值小于或等于指定的最大值 |
@Size | 集合的長度 |
@Digits | 必須為數(shù)字,其值必須再可接受的范圍內 |
@Past | 必須是過去的日期 |
@Future | 必須是將來的日期 |
@Pattern | 必須符合正則表達式 |
必須是郵箱格式 | |
@Length | 長度范圍 |
@NotEmpty | 不能為null,長度大于0 |
@Range | 元素的大小范圍 |
@NotBlank | 不能為null,字符串長度大于0(限字符串) |
引入依賴
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.15.Final</version> </dependency>
Hibernate Validator常用注解
創(chuàng)建測試類
注意必須先進行為null判斷,否則其他注解有的不會生效。
比如username加了@Length而不加@NotNull注解,當沒有輸入username,那么@Length判斷將不會生效,判斷為null的有@NotNull、@NotEmpty以及@NotBlank
建議自行去掉@NotNull再測試一下
package com.dfyang.validator.entity; import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Range; import javax.validation.constraints.NotBlank; public class User { @NotBlank(message = "名稱不能為空") private String name; @Range(min = 1, max = 120, message = "年齡必須為1-120歲") private Integer age; @NotBlank(message = "描述不能為空") private String description; @NotNull @Length(min = 6, max = 18, message = "用戶名長度必須為6-18位") private String username; @NotNull @Length(min = 6, max = 18, message = "密碼長度必須為6-18位") private String password; /** get、set方法 */ }
創(chuàng)建測試Controller
@Valid用在參數(shù)上,表示對該參數(shù)進行校驗。
如果對參數(shù)校驗發(fā)現(xiàn)有誤,會將錯誤注入到BindingResult中
我們這里將錯誤進行打印,也可以直接拋出異常
package com.dfyang.validator.controller; import com.dfyang.validator.entity.User; import org.springframework.validation.BindingResult; import org.springframework.validation.ObjectError; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; @RestController public class UserController { @GetMapping("/insert") @ResponseBody public User insertUser(@Valid User user, BindingResult result) { if (result.hasErrors()) { for (ObjectError error : result.getAllErrors()) { System.err.println(error.getDefaultMessage()); } } return user; } }
輸入 http://localhost:8080/insert?name=張三&descripyion=&age=0&username=123123
使用自定義校驗器進行參數(shù)校驗
創(chuàng)建自定義注解,用于判斷年齡是否符合約束
package com.dfyang.validator.constraint; import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 性別約束 */ @Target({ ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = SexConstraintValidator.class) public @interface Sex { String message() default "性別有誤"; Class<?>[] groups() default { }; Class<? extends Payload>[] payload() default { }; }
判斷注解的值是否符合約束,這里進行了為null判斷,也可以不進行在多加一個@NutNull
package com.dfyang.validator.constraint; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; /** * 性別約束邏輯判斷 */ public class SexConstraintValidator implements ConstraintValidator<Sex, String> { @Override public boolean isValid(String value, ConstraintValidatorContext context) { return value != null && (value.equals("男") || value.equals("女")); } }
@Target用于指定使用范圍,該處限定只能在字段上使用
@Retention(RetentionPolicy.RUNTIME)表示注解在運行時可以通過反射獲取到
@Constraint(validatedBy = xxx.class)指定該注解校驗邏輯
2.創(chuàng)建校驗實體,使用Hibernate Validator自帶注解以及自定義的注解
package com.dfyang.validator.entity; import com.dfyang.validator.constraint.Sex; import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Range; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; public class User { @NotBlank(message = "名稱不能為空") private String name; @Range(min = 1, max = 120, message = "年齡必須為1-120歲") private Integer age; @Sex private String sex; @NotBlank(message = "描述不能為空") private String description; @NotNull(message = "用戶名不能為空") @Length(min = 6, max = 18, message = "用戶名長度必須為6-18位") private String username; @NotNull(message = "密碼不能為空") @Length(min = 6, max = 18, message = "密碼長度必須為6-18位") private String password; /** 省略get、set */ }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
分享名稱:Hibernatevalidator使用以及自定義校驗器注解
當前網(wǎng)址:http://jinyejixie.com/article2/psgoic.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、全網(wǎng)營銷推廣、品牌網(wǎng)站建設、網(wǎng)站制作、企業(yè)網(wǎng)站制作、電子商務
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)