1. 程式人生 > >Spring Boot 使用hibernate validator進行引數校驗

Spring Boot 使用hibernate validator進行引數校驗

demo

實體類

public class UserBean {
    @NotBlank(message="使用者名稱不能為空")
    private String userName;

    @NotBlank(message="年齡不能為空")
    @Pattern(regexp="^[0-9]{1,2}$",message="年齡不正確")
    private String age;

    @AssertFalse(message = "必須為false")
    private Boolean isFalse;
    /**
     * 如果是空,則不校驗,如果不為空,則校驗
     */
    @Pattern(regexp="^[0-9]{4}-[0-9]{2}-[0-9]{2}$",message="出生日期格式不正確")
    private String birthday;
}

測試;

@RestController
@RequestMapping("/vh")
public class ValidatorController {
 
    @RequestMapping("/resign")
    public String resign(@RequestBody @Valid  UserBean user ) {
    	
    	
        return "success";
    }
}

如果校驗通不過返回這樣的報文:

這種方式返回的報文不能控制,我們來看第二種方案:

工具類;

public class ValidatorUtils {
    private static Validator validator;

    static {
        validator = Validation.buildDefaultValidatorFactory().getValidator();
    }

    /**
     * 校驗物件
     * @param object        待校驗物件
     * @throws RuntimeException  校驗不通過,則報RuntimeException異常
     */
    public static void validateEntity(Object object)
            throws RuntimeException {
        Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object);
        if (!constraintViolations.isEmpty()) {
        	ConstraintViolation<Object> constraint = constraintViolations.iterator().next();
        	throw new RuntimeException(constraint.getMessage());
        }
    }
}

測試:

@RestController
@RequestMapping("/vh")
public class ValidatorController {
 
    @RequestMapping("/resign")
    public String resign(@RequestBody @Valid  UserBean user ) {
    	ValidatorUtils.validateEntity(user);
    	
        return "success";
    }
}

附錄:

註解說明:

Bean驗證約束
註解 支援的資料型別 作用
@AssertFalse Boolean, boolean 值等於false
@AssertTrue Boolean, boolean 值等於true
@Future java.util.Date 等 檢查給定的日期比當前日期晚.
@Past java.util.Date 等 檢查給定的日期比當前日期早.
@Max BigDecimal, BigInteger, byte, short, int, long 以及包裝類 檢查該值是否小於或等於約束條件中指定的最大值.
@Min BigDecimal, BigInteger, byte, short, int, long 以及包裝類 檢查該值是否大於或等於約束條件中指定的最小值.
@NotNull 任意型別 帶註釋的值不為null.
@Null 任意型別 帶註釋的值為null.
@Pattern(regex=, flag=) String 檢查該字串是否能夠在match指定的情況下被regex定義的正則表示式匹配.
@Size(min=, max=) String,Collection,Map,array 檢查帶註釋的元素的大小是否在最小值和最大值之間.
@Valid 任何引用資料型別
@CreditCardNumbe String 檢查信用卡號
@Email String 檢查指定的字串是否為有效的電子郵件地址。
@Length(min=, max=) String 確認帶註釋的字串在min和max之間.
@NotBlank String 值不為null 切不為"", 不為"  "
@NotEmpty String,Collection,Map,array 值不為null 或者沒有值
@Range(min=, max=) BigDecimal,String, BigInteger, byte, short, int, long 以及包裝類 值是否位於(包含)指定的最小值和最大值之間。
@SafeHtml(whitelistType=, additionalTags=) 檢查帶註釋的值是否包含潛在的惡意片段,如指令碼/。為了使用這個約束,jsoup庫必須是類路徑的一部分。可以選擇whitelistType屬性預定義白名單型別。您還可以使用additionalTags屬性為白名單指定額外的html標記。
@URL(protocol=, host=, port=, regexp=, flags=) String 根據RFC2396,檢查帶註釋的字串是否是有效的URL。如果指定了任何可選引數協議、主機或埠,相應的URL片段必須匹配指定的值。可選引數regexp和旗幟允許指定URL必須匹配的額外正則表示式(包括正則表示式標誌)。