文章目錄
- 一、背景
- 二、使用
- 三、舉例
一、背景
在項目開發過程中,經常會對一些字段進行校驗,比如字段的非空校驗、字段的長度校驗等,如果在每個需要的地方寫一堆if else 會讓你的代碼變的冗余笨重且相對不好維護,如何更加規范和優雅的校驗呢?
Spring Boot中可以使用Validation Api和Hibernate Validator實現接口入參自動檢驗。
二、使用
1、如果成員變量是其他對象實體,該變量必須加 ??@Valid??
,否則嵌套中的驗證不生效
2、添加依賴:Spring Boot項目工程依賴,因為在spring-boot-starter-web中已經包含了validation-api和hibernate-validator,所以無需再額外引用
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.5</version><relativePath/>
</parent><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
Maven項目工程依賴maven
<dependency><groupId>jakarta.validation</groupId><artifactId>jakarta.validation-api</artifactId></dependency>
3、首先需要了解javax.validation下的三個非空約束注解的作用位置:@NotNull、@NotEmpty、@NotBlank
約束 | 說明 |
---|---|
@NotNull | 作用在Integer上(包括其它基礎類),在Integer屬性上加上@NotNull約束后,該屬性不能為null,沒有size的約束;@NotNull作用在Collection、Map或者集合對象上,該集合對象不能為null,但可以是空集,即size=0(一般在集合對象上用@NotEmpty約束) |
@NotBlank | 只作用在String上,在String屬性上加上@NotBlank約束后,該屬性不能為null且trim()之后size>0 |
@NotEmpty | @NotEmpty 作用在集合類上面,在Collection、Map、數組上加上@NotEmpty約束后,該集合對象是不能為null的,并且不能為空集,即size>0 |
三、舉例
Controller類:
public class CustomerSyncController {/*** 客戶同步*/@ApiOperation(value = "客戶同步")@PostMapping(value = "/customer/sync")public Result<Boolean> syncCustomerInfo(@RequestBody @Valid CustomerInfoVo paramVos) {try {if (!ObjectUtils.isEmpty(paramVos)) {customerInfoService.syncCustomerInfo(paramVos);}} catch (Exception e) {e.printStackTrace();log.error("[syncCustomerInfo] request error,paramVos:{},異常:{}", paramVos, e.getMessage());return Result.error(BasicCodeMsg.SERVER_ERROR);}return Result.success(Boolean.TRUE);}
}
實體類:
@NoArgsConstructor
@Data
public class CustomerInfoVo implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "客戶id")@NotBlank(message = "客戶ID不能為空")private String customerId;@ApiModelProperty(value = "客戶姓名")@NotBlank(message = "客戶姓名不能為空")private String name;@ApiModelProperty(value = "證件類型")@NotNull(message = "證件類型不能為空")private Integer certificateType;@ApiModelProperty(value = "證件號")@NotBlank(message = "證件號不能為空")private String certificate;}
用postman測試即可。