简述项目中用到的validation参数效验,用于controller层请求参数验证
第一步:导入坐标
<!--引入validation的场景启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
第二步 : 在VO层设置具体参数的效验
@Data
public class ClassifyVO{
@NotBlank(message = "打卡组名不能为空")
private String classifyName;
@NotEmpty(message = "部门信息不能为空")
private List<Map> depts;
}
第三步: 在controller层加入参数效验
@PostMapping("/insert")
public R<String> insert(@RequestBody @Validated ClassifyVO paraClassify){
try{
classifyService.insertClassify(paraClassify);
} catch (Exception e)
{
return R.fail().setResult("系统繁忙,稍后重试");
}
return R.ok().setResult("新增打卡组成功");
}
此时已经可以了,但是如果参数效验不通过,抛出的异常提示信息不太友好,所以进行第四步,优化异常提示信息
第四步: 在全局异常拦截中加入 参数异常 的异常信息处理
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public R exceptionHandler(HttpServletRequest request, Exception exception) throws Exception {
//JSR303参数安全效验
if(exception instanceof MethodArgumentNotValidException)
{
log.error(exception.getMessage(), exception);
String message = ((MethodArgumentNotValidException)exception).getBindingResult().getFieldError().getDefaultMessage();
return R.fail(message);
}
String message =exception.getMessage();
log.error(message);
return R.fail(message);
}
}
至此完成,显示效果如下: