前端給后端傳輸數據,有時候參數需要校驗,我們自己寫代碼會比較麻煩,我們可以使用springboot為我們提供的注解,降低這些沒有必要的代碼開發。
1.引入依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.常用注解說明
? @NotNull:值不能為null;
? @NotEmpty:字符串、集合或數組的值不能為空,即?度?于0;
? @NotBlank:字符串的值不能為空?,即不能只包含空格;
? @Size:字符串、集合或數組的??是否在指定范圍內;
? @Min:數值的最?值;
? @Max:數值的最?值;
? @Pattern:字符串是否匹配指定的正則表達式;
? @Email:字符串是否為有效的電?郵件地址;
? @Future:?期是否為將來的?期;? @Past:?期是否為過去的?期;
3.使用案例
@Validated:?于標記,某個類將觸發驗證
@GetMapping("/validation")
public String validation(@Validated ValidationDTO validationDTO) {return "參數校驗測試";
}
@Getter
@Setter
public class ValidationDTO {@NotBlank(message = "??賬號不能為空")private String userAccount;@NotBlank(message = "??密碼不能為空")@Size(min = 5, max = 10, message = "密碼?度不能少于6位,不能?于10位")private String password;@Min(value = 0, message = "年齡不能?于0歲")@Max(value = 60, message = "年齡不能?于60歲")private int age;@Email(message = "必須符合郵箱格式")private String email;@Pattern(regexp = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$", message = "?機號碼格式不正確")private String phone;@Past(message = "開始?期必須是過去的?期")private LocalDate startDate;@Future(message = "結束?期必須是未來的?期")private LocalDate endDate;
}
捕獲異常:
@ExceptionHandler(BindException.class)
public R<Void> handleBindException(BindException e) {log.error(e.getMessage());String message = join(e.getAllErrors(),DefaultMessageSourceResolvable::getDefaultMessage, ", ");return R.fail(ResultCode.FAILED_PARAMS_VALIDATE.getCode(), message);
}private <E> String join(Collection<E> collection, Function<E, String> function, CharSequence delimiter) {if (CollUtil.isEmpty(collection)) {return StrUtil.EMPTY;}return collection.stream().map(function).filter(Objects::nonNull).collect(Collectors.joining(delimiter));
}