springboot 统一异常处理(包含统一数据校验)

  • 时间:
  • 浏览:0
  • 来源:uu快3和值_uu快3app_计划师

java注解详解

封装好后,获取所含@Exceptionhandler的注解辦法 ,即根据异常类型进行调用了。

机会返回的对象是JSON语句,需要用@RestControllerAdvice

public class MyException extends Exception{

业务逻辑和异常处理逻辑解耦;

在开发中,亲戚亲戚亲戚我门 我门 有无遇到过如下有一种 奇葩难题:

getExceptionHandlerMethod(handlerMethod, exception);

}

在或多或少辦法 中的第一行,getExceptionHandlerMethod辦法 ,其进行了查找对应的所含@ControllerAdvice注解的类型和对应匹配的辦法 ,或多或少在doResolverHandlerMethod辦法 中进行了处理,这却说整个流程。

@ControllerAdvice

这麼异常统一处理哪些好处呢?

2.2 统一异常处理

private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);

2.1 springboot的默认异常处理

提高用户体验;

机会想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的亲戚亲戚我门 我门 需要加我的Java高级交流:787707172,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给亲戚亲戚亲戚我门 我门 。

1、统一异常处理的优势

this.processDispatchResult(processedRequest,

response, mappedHandler, mv, (Exception)dispatchException);

上端会进入HandlerExceptionResolverComposite的resolveException辦法 ,或多或少ExceptionHandlerResolverComposite包所含另六个 ExcpetionHandlerResolver,是在springmvc中生成的,在springboot中其生成代码如下:

对异常进行分类统一处理,减少冗余代码;

或多或少直接返回错误页面,对于用户而言,显然是太不友好了哈!

比如:

@RestController

public class Test {

@RequestMapping(value = {"/test"},method = RequestMethod.GET)

public String test(@RequestParam("id")Integer id){

return "id:"+id;

}

}

运行后访问结果如下:

springboot 统一异常处理(所含统一数据校验)

@RestControllerAdvice与@ExceptionHandler注解是sprngmvc中与异常捕获与处理相关的注解,它的入口也是DispatcherServlet中的doDispatcher()辦法 中,如下:

机会想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的亲戚亲戚我门 我门 需要加我的Java高级交流:787707172,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给亲戚亲戚亲戚我门 我门 。

难题(1)没哪些好说的,直接拖出去枪毙吧;难题(2)先把产品经理宰了再说吧,看起来好像很专业的样子,出了哪些难题直接看response返回的结果就知道个要花费,研发测试都很方便,却说,亲戚亲戚亲戚我门 我门 想过这麼,研发测试运维的难题,凭哪些要用户买单,你见过淘宝京东有之前 出了难题我应该 类似“out of memory”的异常提示吗?

public class ExceptionHandle {

@ControllerAdvice

@ControllerAdvice的加载过程:

Exception exception) {

便于代码风格统一,或多或少更优雅(比如参数校验的之前 ,得写统统if else,或多或少不同的人写法不一致);

Spring Boot提供了有另六个 默认的映射:/error,当处理中抛出异常之前 ,会转到该请求中处理,或多或少该请求有有另六个 全局的错误页面用来展示异常内容。

public MyException(Integer code,String Message) {

this.code = code;

this.Message = Message;

}

}

或多或少定义另一方的异常处理类,ExceptionHandle.java

@ExceptionHandler

3.1 注解源码解析

@ExceptionHandler(value = Exception.class)

@ResponseBody

public Result handle(Exception e) {

if (e instanceof MyException) {

MyException myException = (MyException) e;

return ResultUtil.error(boyException.getCode(), boyException.getMessage());

}else {

logger.error("【系统异常】{}", e);

return new Result(-1, "未知错误");

}

}

}

3、统一异常处理源码解析

2、统一异常处理的实现

上端他会进入ExceptionHandlerExceptionResolver类的辦法 :

首先,定义另一方的异常类,随便起个名字哈,MyException.java

@Data

首先在springboot扫描的之前 ,会把@ControllerAdvice的bean上放去到beanFactory上端去,此时假如从beanFactory中获取到需要的bean即可,处理辦法 在ExceptionHandlerExceptionResolver类中:

(2)前端不做任何提示,一切提示信息都来自后端,成功的之前 自然没哪些,失败的之前 ,比如将Exception的描述信息(e.getMessage)返回。

java异常详解

(1)假如这麼成功,不管哪些导致 ,前端界面给出提示:服务端错误/异常。哪怕是数据校验不过,也之前 提示(嗯,反正先把锅甩出去再说,具体哪些导致 我才都这麼乎呢,老子却说这麼聪明);

private Integer code;

private String Message;