Spring Boot 使用hibernate validator進行引數校驗
阿新 • • 發佈:2018-12-10
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";
}
}
附錄:
註解說明:
註解 | 支援的資料型別 | 作用 |
---|---|---|
@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 | 檢查信用卡號 |
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必須匹配的額外正則表示式(包括正則表示式標誌)。 |