1.导包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.实体校验类型
@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
public class Websites implements Serializable {
private static final long serialVersionUID = 4162334049119728731L;
private Integer id;
@NotNull(message = "name不能为空")
private String name;
@NotNull(message = "url不能为空")
private String url;
@NotNull(message = "alexa不能为空")
private Integer alexa;
@NotNull(message = "country不能为空")
private String country;
}
/**
* 保存一个网址对象
* http://localhost:8080/saveWebsites
*/
@PostMapping("/saveWebsites")
public String saveWebsites(@RequestBody @Valid Websites websites) {
// 判断是否含有校验不匹配的参数错误
/*if (bindingResult.hasErrors()) {
// 获取所有字段参数不匹配的参数集合
List<FieldError> fieldErrorList = bindingResult.getFieldErrors();
Map<String, Object> result = new HashMap<>(fieldErrorList.size());
fieldErrorList.forEach(error -> {
// 将错误参数名称和参数错误原因存于map集合中
result.put(error.getField(), error.getDefaultMessage());
});
log.info("============判断是否含有校验不匹配的参数错误==============");
return result.toString();
}*/
log.info("======================是否执行");
boolean flag = websitesService.saveWebsites(websites);
if (flag) {
log.info(websites.toString());
} else {
log.info("保存失败");
}
return "hello,world!" + flag;
}
3.单值校验
注意在类上面添加 @Validated
@Slf4j
@RestController
@Validated
public class IndexController {
@CrossOrigin
@PostMapping("/index")
public String index(@NotNull(message = "username不能为空") String username) {
//String a = URLEncoder.encode(username);
//a = URLDecoder.decode(username);
log.info("==============" + username);
return username;
}
}
4.全局捕获校验异常
/**
* 单个参数校验异常
*/
@ExceptionHandler(ConstraintViolationException.class)
public List<String> constraintViolationException(ConstraintViolationException e) {
log.error("单个参数校验异常");
List<String> defaultMsg = e.getConstraintViolations()
.stream()
.map(ConstraintViolation::getMessage)
.collect(Collectors.toList());
return defaultMsg;
}
/**
*实体参数校验
* @param e
* @return
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public Map<String, Object> methodArgumentNotValidException(MethodArgumentNotValidException e){
BindingResult bindingResult = e.getBindingResult();
// 获取所有字段参数不匹配的参数集合
List<FieldError> fieldErrorList = bindingResult.getFieldErrors();
Map<String, Object> result = new HashMap<>(fieldErrorList.size());
fieldErrorList.forEach(error -> {
// 将错误参数名称和参数错误原因存于map集合中
result.put(error.getField(), error.getDefaultMessage());
});
log.info("========参数校验异常=========");
return result;
}
常用验证注解
常用的注解主要有以下几个,作用及内容如下所示
@Null,标注的属性值必须为空
@NotNull,标注的属性值不能为空
@AssertTrue,标注的属性值必须为true
@AssertFalse,标注的属性值必须为false
@Min,标注的属性值不能小于min中指定的值
@Max,标注的属性值不能大于max中指定的值
@DecimalMin,小数值,同上
@DecimalMax,小数值,同上
@Negative,负数
@NegativeOrZero,0或者负数
@Positive,整数
@PositiveOrZero,0或者整数
@Size,指定字符串长度,注意是长度,有两个值,min以及max,用于指定最小以及最大长度
@Digits,内容必须是数字
@Past,时间必须是过去的时间
@PastOrPresent,过去或者现在的时间
@Future,将来的时间
@FutureOrPresent,将来或者现在的时间
@Pattern,用于指定一个正则表达式
@NotEmpty,字符串内容非空
@NotBlank,字符串内容非空且长度大于0
@Email,邮箱
@Range,用于指定数字,注意是数字的范围,有两个值,min以及max
本文详细介绍如何在Spring Boot项目中实现参数校验,包括实体类校验、单值校验、全局异常处理及常用验证注解。通过具体示例展示如何确保数据的有效性和一致性。
1519

被折叠的 条评论
为什么被折叠?



