1.可以做什么
简化接口的参数验证
2.怎么使用
添加依赖
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
方式一:在控制器的普通参数上使用
使用场景:query传参和path传参
1.类上添加注解@Validated
2.方法参数前添加注解@NotEmpty(message = "请选择要删除的记录")
java
@RestController
@RequestMapping("/system/sysUser")
@Validated
public class SysUserController {
@Autowired
private SysUserService sysUserService;
@DeleteMapping("/del")
@FDR
public Result del(@NotEmpty(message = "请选择要删除的记录") @RequestBody List<String> ids) {
if (sysUserService.delByIds(ids)){
return Result.delOk();
}
return Result.delFail();
}
}
添加统一异常处理类
java
/**
* 统一异常处理类
*/
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
@ExceptionHandler(ConstraintViolationException.class)
public Result handleConstraintViolationException(ConstraintViolationException e) {
log.error("ConstraintViolationException: ",e);
return Result.error(e.getConstraintViolations().stream().map(ConstraintViolation::getMessage).collect(Collectors.joining("|")));
}
}
方式二:在控制器的对象参数上使用
使用场景:表单提交
第一步:创建实体类,在实体类的属性上添加校验注解
java
@Data
public class SysUser {
/**
* 用户名
*/
@NotBlank(message = "账号不能为空")
@Size(min = 6, max = 10,message = "账号长度为6-10位")
private String loginName;
}
第二步:在方法的对象参数前添加注解
添加@Valid注解
java
@RestController
@RequestMapping("/system/sysUser")
public class SysUserController {
@Autowired
private SysUserService sysUserService;
@PostMapping("/add")
public Result add(@Valid @RequestBody SysUser sysUser) {
if (sysUserService.add(sysUser)){
return Result.addOk(sysUser);
}
return Result.addFial();
}
}
添加统一异常处理类
java
/**
* 统一异常处理类
*/
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
log.error("MethodArgumentNotValidException: ",e);
return Result.error(e.getBindingResult().getAllErrors().stream().map(ObjectError::getDefaultMessage).collect(Collectors.joining("|")));
}
}
方式三:在控制器的对象参数上进行分组使用
使用场景:添加用户时需要输入密码,修改用户时不需要输入密码,这是可以使用分组进行区分
第一步:添加分组接口
java
public interface Add {
}
第一步:创建实体类,在实体类的属性上添加校验注解
java
@Data
public class SysUser {
/**
* 用户名
*/
@NotBlank(message = "账号不能为空")
@Size(min = 6, max = 10,message = "账号长度为6-10位")
private String loginName;
/**
* 密码
*/
@NotBlank(groups = Add.class,message = "密码不能为空")
@Size(groups = Add.class, min = 6, max = 18,message = "密码长度为6-18位")
private String password;
}
第二步:在方法的对象参数前添加注解
添加@Valid和@Validated(Add.class)注解
java
@RestController
@RequestMapping("/system/sysUser")
public class SysUserController {
@Autowired
private SysUserService sysUserService;
@PostMapping("/add")
public Result add(@Valid @Validated(Add.class) @RequestBody SysUser sysUser) {
if (sysUserService.add(sysUser)){
return Result.addOk(sysUser);
}
return Result.addFial();
}
}