SpringMVC异步处理

SpringMVC异步处理:一般分两种处理方法 第一种是:局部异常处理,第二种是:全局异常处理

一、局部异常处理

在Controller层里面使用@ExceptionHandler注解:这种方式处理的异常只针对@ExceptionHandler所在的那个Controller方法,局限性比较大。对于Controller之外出现的异常无法处理。
在配置当前Controller的异常处理【-@ExceptionHandler[(可以指定处理的指定异常类.class)]】,对于文件上传的异常,默认这里是无法处理的 出现异常的地方不在本Controller内可以在multipartResolver 中配置后捕获

二、全局异常处理

(1)、使用SimpleMappingExceptionResolver该方法处理全局异常,只要有对应的异常抛出,就会使用这个bean进行处理。使用SimpleMappingExceptionResolver 的话,只要在springmvc配置文件中添加配置就可以了。
(2)、使用HandlerExceptionResolver这个是全局异常,只要有对应的异常抛出,就会使用这个类进行处理。注意使用这种方式的话,需要使这个类成为bean,可以使用注解方式,也可以在spring配置文件中声明。HandlerExceptionResolver 的实现类会 catch 到 @Controller 方法执行时发生的异常,处理后返回ModelAndView 作为结果视图,因此可以通过它来定制异常视图。
HandlerExceptionResolver 只能捕获 @Controller 层发生的异常(包括 @Controller 调用@Service
发生的异常)。而其他地方的异常,比如访问了一个不存在的路径,不会HandlerExceptionResolver 捕获。
(3)、使用 @ControllerAdvice 和 @ExceptionHandler 注解
使用@ControllerAdvice和@ExceptionHandler注解这是全局的异常,@Controller是一部分的异常但是@ControllerAdvice是全局的可以配置,它也不是完全是全局,根据配置来决定。
还有一个注解 @RestControllerAdvice 等价于 @ControllerAdvice + @ResponseBody
注意:!!本质:这种方式配置的异常处理由HandlerExceptionResolver的默认实现类HandlerExceptionResolverCompsite 处理,但是它也有一个限制也是只能捕获 @Controller 层的异常。虽然它是全局的,但是它是@Controller的全局
@ControllerAdvice 指定 Controller 范围主要依靠自身的几个属性实现:

  1. basePackages :指定一个或多个包,这些包及其子包下的所有 Controller 都被该
    @ControllerAdvice 管理。下面三种写法等价:
    @ControllerAdvice(“com.gx.controller”)
    @ControllerAdvice(value = “com.gx.controller”)
    @ControllerAdvice(basePackages = “com.gx.controller”)
    还可以用数组形式:@ControllerAdvice(basePackages={“字符串”,“字符串”})
  2. basePackageClasses :是 basePackages 的一种变形,指定一个或多个 Controller 类,这些类
    所属的包及其子包下的所有 Controller 都被该 @ControllerAdvice 管理。
    @ControllerAdvice(basePackageClasses = FileUploadController.class)
  3. assignableTypes :指定一个或多个 Controller 类,这些类被该 @ControllerAdvice 管理。
    @ControllerAdvice(assignableTypes = {FileUploadController.class})
    4.annotations:指定一个或多个注解,被这些注解所标记的Controller会被该@ControllerAdvice管理。@ControllerAdvice(annotations = {RestController.class})
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值