【1】springboot自定义异常
2021-11-20 本文已影响0人
进击的小鹿
1、入参是一个对象,其中包含多个参数(先贴一个异常的返回内容)
当BindingResult中存在错误信息时,会抛出BindException异常。BindException实现了BindingResult接口(BindResult是绑定结果的通用接口, BindResult继承于Errors接口),所以该异常类拥有BindingResult所有的相关信息,因此我们可以通过捕获该异常类,对其错误结果进行分析和处理。
{
"timestamp": "2021-11-11 20:41:55",
"status": 400,
"error": "Bad Request",
"errors": [
{
"codes": [
"NotNull.***.confirmFlag",
"NotNull.confirmFlag",
"NotNull.java.lang.Integer",
],
"arguments": [
{
"codes": [
"***.confirmFlag",
"confirmFlag"
],
"arguments": null,
"defaultMessage": "confirmFlag",
"code": "confirmFlag"
}
],
"defaultMessage": "确认的参数不能为空",
"objectName": "***",
"field": "confirmFlag",
"rejectedValue": null,
"bindingFailure": false,
"code": "NotNull"
}
],
"message": "Validation failed for object='***'. Error count: 1",
"path": "**/**/"
}
2、捕捉异常
使用@ControllerAdvice统一处理参数校验的结果
如果 使用了@RequestBody @Valid 来封装参数并校验,这个时候这个异常处理器又不起作用了,需要再添加一个异常处理器。添加自己想要的自定义异常处理器。
返回异常的结果,可以拆解BindingResult,也可以自定义返回code。
/**
* 处理自定义异常
*/
@ExceptionHandler(BindException.class)
public Result handleBindingException(BindException e) {
log.error("BindException errMes:{}, result={}", e.getMessage(), e);
final List<String> collect = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.toList());
return Result.error(collect.toString());
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
log.error(e.getMessage(), e);
final List<String> collect = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.toList());
return Result.error(collect.toString());
}