1. 程式人生 > >Hibernate-Validation的使用和常用的註解

Hibernate-Validation的使用和常用的註解

    @AssertTrue //用於boolean欄位,該欄位只能為true       @AssertFalse//該欄位的值只能為false       @CreditCardNumber//對信用卡號進行一個大致的驗證       @DecimalMax//只能小於或等於該值       @DecimalMin//只能大於或等於該值       @Digits(integer=2,fraction=20)//檢查是否是一種數字的整數、分數,小數位數的數字。       @Email//檢查是否是一個有效的email地址       @Future//檢查該欄位的日期是否是屬於將來的日期       @Length(min=,max=)//檢查所屬的欄位的長度是否在min和max之間,只能用於字串       @Max//該欄位的值只能小於或等於該值       @Min//該欄位的值只能大於或等於該值       @NotNull//不能為null       @NotBlank//不能為空,檢查時會將空格忽略       @NotEmpty//不能為空,這裡的空是指空字串       @Null//檢查該欄位為空       @Past//檢查該欄位的日期是在過去       @Size(min=, max=)//檢查該欄位的size是否在min和max之間,可以是字串、陣列、集合、Map等       @URL(protocol=,host,port)//檢查是否是一個有效的URL,如果提供了protocol,host等,則該URL還需滿足提供的條件       @Valid//該註解只要用於欄位為一個包含其他物件的集合或map或陣列的欄位,或該欄位直接為一個其他物件的引用,               //這樣在檢查當前物件的同時也會檢查該欄位所引用的物件  

@NotEmpty,@NotNull和@NotBlank的區別

1 @NotEmpty :不能為null,且Size>0

2  @NotNull:不能為null,但可以為empty,沒有Size的約束

3  @NotBlank:只用於String,不能為null且trim()之後size>0

1.建立自定義校驗器

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 = MyConstraintValidator.class) public @interface MyConstraint {     /**     * @Description: 錯誤提示     */     String message() default "請輸入正確性別";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { }; }

import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext;

public class MyConstraintValidator implements ConstraintValidator<MyConstraint, String> {   //String為校驗的型別     @Override     public void initialize(MyConstraint myConstraint) {         //啟動時執行     }

    /**     * @Description: 自定義校驗邏輯     */     @Override     public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {         if (!(s.equals("男") || s.equals("女")))             return false;         return true;     } }

@Target用於指定使用範圍,該處限定只能在欄位上使用 @Retention(RetentionPolicy.RUNTIME)表示註解在執行時可以通過反射獲取到 @Constraint(validatedBy = xxx.class)指定該註解校驗邏輯 2.建立校驗實體,使用Hibernate Validator自帶註解以及自定義的註解

import org.hibernate.validator.constraints.Email; import org.hibernate.validator.constraints.Length;

//@Data為lombok註解,用於省略get(),set()方法 @Data public class User {     @Length(min = 8, max = 18, message = "使用者名稱長度必須為8-18")     private String username;

    @Length(min = 8, max = 18, message = "密碼長度必須為8-18")     private String password;

    @MyConstraint     private String sex;

    @Email     private String email; }

3.寫一個controller

import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@RestController public class UserController {    @PutMapping("/user")     public String test(@Valid @RequestBody User user, BindingResult result){        StringBuilder sb = new StringBuilder();         if (result.hasErrors()){             //記錄錯誤資訊             result.getAllErrors().stream()                     .forEach(error -> sb.append(error.getDefaultMessage() + "/"));         }         return sb.toString();    } }