后端参数校验
前端给后端传输数据,有时候参数需要校验,我们自己写代码会比较麻烦,我们可以使用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));
}