在Spring Boot中,@Validated注解用于驗(yàn)證請(qǐng)求參數(shù)。它可以應(yīng)用在Controller類或方法上
1、引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2、參數(shù)說明與使用示例
注解 | 驗(yàn)證的數(shù)據(jù)類型 | 描述 |
---|---|---|
@NotNull | 任意類型 | 驗(yàn)證屬性不能為null |
@NotBlank | 字符串 | 驗(yàn)證字符串屬性不能為空且長(zhǎng)度必須大于0 |
@Size(min,max ) | CharSequence Collection Map Array |
字符串:字符串長(zhǎng)度必須在指定的范圍內(nèi) Collection:集合大小必須在指定的范圍內(nèi) Map:map的大小必須在指定的范圍內(nèi) Array:數(shù)組長(zhǎng)度必須在指定的范圍內(nèi) |
@Min | 整型類型 | 驗(yàn)證數(shù)字屬性的最小值 |
@Max | 整型類型 | 驗(yàn)證數(shù)字屬性的最大值 |
@DecimalMin | 數(shù)字類型 | 驗(yàn)證數(shù)字屬性的最小值(包括小數(shù)) |
@DecimalMax | 數(shù)字類型 | 驗(yàn)證數(shù)字屬性的最大值(包括小數(shù)) |
@Digits(integer,fraction) | 數(shù)字類型 | 驗(yàn)證數(shù)字屬性的整數(shù)位數(shù)和小數(shù)位數(shù) |
字符串類型 | 驗(yàn)證字符串屬性是否符合Email格式 | |
@Pattern | 字符串 | 驗(yàn)證字符串屬性是否符合指定的正則表達(dá)式 |
@Positive | 數(shù)字類型 | 驗(yàn)證數(shù)值為正數(shù) |
@PositiveOrZero | 數(shù)字類型 | 驗(yàn)證數(shù)值為正數(shù)或0 |
@Negative | 數(shù)字類型 | 驗(yàn)證數(shù)值為負(fù)數(shù) |
@NegativeOrZero | 數(shù)字類型 | 驗(yàn)證數(shù)值為負(fù)數(shù)或0 |
@AssertTrue | 布爾類型 | 參數(shù)值必須為 true |
@AssertFalse | 布爾類型 | 參數(shù)值必須為 false |
@Past | 時(shí)間類型(Date) | 參數(shù)值為時(shí)間,且必須小于 當(dāng)前時(shí)間 |
@PastOrPresent | 時(shí)間類型(Date) | 參數(shù)值為時(shí)間,且必須小于或等于 當(dāng)前時(shí)間 |
@Future | 時(shí)間類型(Date) | 參數(shù)值為時(shí)間,且必須大于 當(dāng)前時(shí)間 |
@FutureOrPresent | 時(shí)間類型(Date) | 參數(shù)值為時(shí)間,且必須大于或等于 當(dāng)前日期 |
@Data
public class User {
// @NotNull:驗(yàn)證屬性不能為null。
@NotNull(message = "用戶名不能為null")
private String username;
// @NotBlank:驗(yàn)證字符串屬性不能為空且長(zhǎng)度必須大于0。
@NotBlank(message = "用戶名不能為空且長(zhǎng)度必須大于0")
private String username1;
// @Size:驗(yàn)證字符串屬性的長(zhǎng)度范圍。
@Size(min = 6, max = 20,message = "密碼最小6位,最長(zhǎng)20位")
private String password;
// @Min:驗(yàn)證數(shù)字屬性的最小值。
@Min(value = 18,message = "年齡最小18歲")
private int age;
// @Max:驗(yàn)證數(shù)字屬性的最大值。
@Max(100)
private int age1;
// @DecimalMin:驗(yàn)證數(shù)字屬性的最小值(包括小數(shù))。
@DecimalMin("0.01")
private BigDecimal price;
// @DecimalMax:驗(yàn)證數(shù)字屬性的最大值(包括小數(shù))。
@DecimalMax("1000.00")
private BigDecimal price1;
// @Digits:驗(yàn)證數(shù)字屬性的整數(shù)位數(shù)和小數(shù)位數(shù)。
@Digits(integer = 3, fraction = 2)
private BigDecimal weight;
// @Email:驗(yàn)證字符串屬性是否符合Email格式。
@Email
private String email;
// @Pattern:驗(yàn)證字符串屬性是否符合指定的正則表達(dá)式。
@Pattern(regexp = "[A-Za-z0-9]+")
private String username2;
// @Positive:驗(yàn)證數(shù)值為正數(shù)
@Positive
private int age2;
// @PositiveOrZero:驗(yàn)證數(shù)值為正數(shù)或0
@PositiveOrZero
private int age3;
// @Negative:驗(yàn)證數(shù)值為負(fù)數(shù)
@Negative
private int age4;
// @NegativeOrZero:驗(yàn)證數(shù)值為負(fù)數(shù)或0
@NegativeOrZero
private int age5;
// @AssertTrue:參數(shù)值必須為 true
@AssertTrue
private boolean hasMoney;
// @AssertFalse:參數(shù)值必須為 false
@AssertFalse
private boolean hasMoney1;
// @Past:參數(shù)值為時(shí)間,且必須小于 當(dāng)前時(shí)間
@Past
private Date time;
// @PastOrPresent:參數(shù)值為時(shí)間,且必須小于或等于 當(dāng)前時(shí)間
@PastOrPresent
private Date time1;
// @Future:參數(shù)值為時(shí)間,且必須大于 當(dāng)前時(shí)間
@Future
private Date time2;
// @FutureOrPresent:參數(shù)值為時(shí)間,且必須大于或等于 當(dāng)前日期
@FutureOrPresent
private Date time3;
}
嵌套校驗(yàn):
在被檢驗(yàn)的字段上添加 @Valid 注解就可以實(shí)現(xiàn)嵌套檢驗(yàn)
@Data
public class User3 {
@Valid
List<User2> user2List;
@Valid
private User2 user2;
}
@Data
class User2 {
@NotBlank(message = "用戶名不能為空!")
private String username;
}
3、校驗(yàn)注解的三個(gè)參數(shù):
-
message
:自定義錯(cuò)誤消息??梢酝ㄟ^該參數(shù)指定驗(yàn)證失敗時(shí)返回的錯(cuò)誤消息。
示例:
public class User {
@NotBlank(message = "用戶名不能為空")
private String username;
// getter and setter
}
-
groups
:分組校驗(yàn)??梢酝ㄟ^該參數(shù)指定在特定的驗(yàn)證分組中才進(jìn)行驗(yàn)證。
示例:
public interface Group1 {}
public interface Group2 {}
public class User {
@NotBlank(groups = Group1.class)
private String username;
@NotBlank(groups = Group2.class)
private String password;
// getter and setter
}
username屬性只在Group1分組中進(jìn)行驗(yàn)證,password屬性只在Group2分組中進(jìn)行驗(yàn)證。
-
payload
:用于攜帶額外的驗(yàn)證信息。可以通過該參數(shù)傳遞一些自定義的驗(yàn)證信息。(不常用)
示例:
public class User {
@NotBlank(payload = {ValidationInfo.class})
private String username;
// getter and setter
}
public class ValidationInfo {
private String info;
// getter and setter
}
當(dāng)驗(yàn)證失敗時(shí),可以通過ConstraintViolation對(duì)象獲取到ValidationInfo對(duì)象,并獲取其中的驗(yàn)證信息。
Set<ConstraintViolation<User>> violations = validator.validate(user);
for (ConstraintViolation<User> violation : violations) {
if (violation.getConstraintDescriptor().getPayload().contains(ValidationInfo.class)) {
ValidationInfo validationInfo = violation.getConstraintDescriptor().getPayload(ValidationInfo.class);
String info = validationInfo.getInfo();
// 處理驗(yàn)證信息
}
}
4、在post 和 get 請(qǐng)求上使用
在post上使用@Validated,get上直接放校驗(yàn)注解文章來源:http://www.zghlxwxcb.cn/news/detail-633629.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-633629.html
到了這里,關(guān)于Springboot @Validated注解詳細(xì)說明的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!