Spring异常实现统一处理的方法

目录
  • 1.统一处理异常的机制
  • 2.关于统一处理异常的方法
  • 3.关于处理异常的方法的执行特点

1.统一处理异常的机制

Spring MVC框架提供了统一处理异常的机制!表现为每种类型的异常只需要写一段(写一次)处理此异常的代码即可,项目中无论处理哪种请求时,只要出现这种异常,都会自动执行这段代码!

提示:当项目中添加了spring-boot-starter-web依赖项,此依赖项中的核心就是Spring MVC框架的依赖项。

在实现统一处理异常之前,需要先使得控制器中处理请求的方法不再处理异常!则处理请求的方法表现为抛出异常(但并不需要从代码中显式的表现出来)!

2.关于统一处理异常的方法

访问权限:应该使用public

返回值类型:参考处理请求的方法方法

名称:自定义

参数列表:至少有1个异常类型的参数,表示被处理的异常,另外,可以按需添加;HttpServletRequestHttpServletResponse等少量特定类型的参数,不可以随意添加其它;参数,例如不可以添加HttpSession等,如果有多个参数,各参数可以不区分先后顺序;

注解:必须添加@ExceptionHandler,表示此方法是处理异常的方法。

@ExceptionHandler
public String handleServiceException(ServiceException e) {
    return e.getMessage();
}

3.关于处理异常的方法的执行特点

允许同时存在多个处理异常的方法,只要这些方法处理的异常不完全相同即可;

多个处理异常的方法,其处理的异常类型允许存在继承关系;

  • 例如某方法处理NullPointerException,另一个方法处理RuntimeException,是正确的;
  • 当出现子级异常时,将执行处理子级异常的方法;

如果将处理异常的方法定义在控制器类中,则这些方法只能作用于当前控制器类中处理的请求;

可以自定义类,在类上添加@RestControllerAdvice注解,将处理异常的方法声明在这个类中,可以作用于当前项目中所有处理请求时方法。

则在项目的根包下创建ex.handler.GlobalExceptionHandler类,在类上添中@RestControllerAdvice注解,并在此类中处理异常(在任何控制器类中都不再处理异常):

package cn.tedu.csmall.product.ex.handler;
import cn.tedu.csmall.product.ex.ServiceException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler
    public String handleServiceException(ServiceException e) {
        return e.getMessage();
    }
    @ExceptionHandler
    public String handleNullPointerException(NullPointerException e) {
        return "程序出现了空指针异常,已经被处理!";
    }
    @ExceptionHandler
    public String handleRuntimeException(RuntimeException e) {
        return "程序出现了RuntimeException,已经被处理!";
    }
}

User login(String username, String password) throws 用户名不存在异常, 密码错误异常, 账号非法状态异常……
// boolean:表示登录成功,或登录失败
//             但是,无法表示哪种失败
// int:使用某个数据表示某种状态,例如1表示登录成功,2表示用户名错,3表示密码错,4表示封号,等等
//            但是,无法返回登录成功的结果

try {
    User user = service.login("root", "1234");
    // 将User对象保存到Session中
} catch (用户名不存在异常 e) {
} catch (密码错误异常 e) {
} catch (账号非法状态异常 e) {
}

到此这篇关于Spring异常实现统一处理的方法的文章就介绍到这了,更多相关Spring异常处理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot中如何统一接口返回与全局异常处理详解

    目录 背景 统一接口返回 定义API返回码枚举类 定义正常响应的API统一返回体 定义异常响应的API统一返回体 编写包装返回结果的自定义注解 定义返回结果拦截器 WebMvc配置类拦截器注册者添加返回结果拦截器 编写响应体处理器 接口调用 测试结果 全局异常处理 编写自定义异常基类 编写自定义业务异常类 定义全局异常处理类 接口调用 测试结果 总结 背景 在分布式.微服务盛行的今天,绝大部分项目都采用的微服务框架,前后端分离方式.前端和后端进行交互,前端按照约定请求URL路径,并传入相关参数,

  • SpringBoot中如何进行统一异常处理

    目录 1.处理前 2.进行系统异常全局处理 3.进行自定义异常处理 总结 如何在SpringBoot项目里进行统一异常处理 需要了解的知识 @ControllerAdvice的作用 1.处理前 异常代码 /** * 根据id获取医院设置 * * @param id 查看的id编号 * @return */ @ApiOperation(value = "根据id获取医院设置") @GetMapping("/findHospById/{id}") public Resu

  • 如何在SpringBoot项目里进行统一异常处理

    目录 1.处理前 2.进行系统异常全局处理 3.进行自定义异常处理 效果 前言: 需要了解的知识: @ControllerAdvice的作用 1.处理前 异常代码: /** * 根据id获取医院设置 * * @param id 查看的id编号 * @return */ @ApiOperation(value = "根据id获取医院设置") @GetMapping("/findHospById/{id}") public Result findHospById(@Pa

  • Spring Boot统一处理全局异常的实战教程

    目录 注解的介绍 @ControllerAdvice @ExceptionHandler拦截异常并统一处理 代码实现 自定义异常 统一异常处理 前端返回值类 测试用例 附:Spring Boot默认的异常处理机制 总结 注解的介绍 @ControllerAdvice @ControllerAdvice注解是Spring3.2中新增的注解,学名是Controller增强器,作用是给Controller控制器添加统一的操作或处理. 这里ControllerAdvice也可以这么理解,其抽象级别应该是

  • Spring Boot全局统一异常处理器

    一.封装统一返回结果类 import com.jiusen.exercise.enums.ErrorEnum; import com.jiusen.exercise.exception.BusinessException; import lombok.Getter; import lombok.Setter; /** * @author: Lawson * @date: 2021/5/11 * @description: TODO 统一的返回结果 */ @Getter @Setter publi

  • 关于Spring统一异常处理及说明

    目录 相关注解概述 全局异常依赖包 示例 @ExceptionHandler注解使用方法 基本使用方法 注解的参数 异常类型就近原则 注解方法的返回值 注解使用错误举例 相关注解概述 通过使用@RestControllerAdvice或@ControllerAdvice定义统一的异常处理类,而不是在每个Controller中逐个定义: @RestControllerAdvice:返回Json格式数据: @ControllerAdvice:返回视图类型数据: @ResponseBody:和Cont

  • Springboot项目异常处理及返回结果统一

    目录 背景 返回结果定义 异常的定义 异常的处理 返回结果的处理 完整代码 使用示例 背景 在创建项目的初期,我们需要规范后端返回的数据结构,以便更好地与前端开发人员合作. 比如后端返回的数据为: {  "msg": "请跳转登陆页面", } 此时前端无法确定后端服务的处理结果是成功的还是失败的.在前端展示页面,成功与失败的展示是要作区分的,甚至不同的成功或失败结果要做出不同的展现效果,这也就是我们为什么要对返回结果做出统一规范的原因. 返回结果定义 public

  • SpringBoot接口如何统一异常处理

    目录 为什么要优雅的处理异常 实现案例 @ControllerAdvice异常统一处理 Controller接口 运行测试 进一步理解 @ControllerAdvice还可以怎么用? @ControllerAdvice是如何起作用的(原理)? 为什么要优雅的处理异常 如果我们不统一的处理异常,经常会在controller层有大量的异常处理的代码, 比如: @Slf4j @Api(value = "User Interfaces", tags = "User Interfac

  • Spring异常实现统一处理的方法

    目录 1.统一处理异常的机制 2.关于统一处理异常的方法 3.关于处理异常的方法的执行特点 1.统一处理异常的机制 Spring MVC框架提供了统一处理异常的机制!表现为每种类型的异常只需要写一段(写一次)处理此异常的代码即可,项目中无论处理哪种请求时,只要出现这种异常,都会自动执行这段代码! 提示:当项目中添加了spring-boot-starter-web依赖项,此依赖项中的核心就是Spring MVC框架的依赖项. 在实现统一处理异常之前,需要先使得控制器中处理请求的方法不再处理异常!则

  • Spring MVC Controller返回值及异常的统一处理方法

    旧的设计方案 开发api的时候,需要先定义好接口的数据响应结果.如下是一个很简单直接的Controller实现方法及响应结果定义. @RestController @RequestMapping("/users") public class UserController { @Inject private UserService userService; @GetRequest("/{userId:\\d+}") public ResponseBean signin

  • Spring Cloud zuul自定义统一异常处理实现方法

    Zuul在springcloud微服务体系中提供filer和router功能,是微服务不可或缺的部分.filer处理默认实现的外还可以自定义进行授权.限流.安全校验等,router完全可以替代Nginx反向代理.Zuul异常处理就是由SendErrorFilter完成. 在我们应用过程我们发现使用默认的异常filter有两个问题不是很友好: 1.无法快速识别出是否是请求路由的服务超时还是没有任何可用节点,发生错误只能查看日志通过堆栈去定位: 2.无法兼容自定义的譬如{code:500,msg:"

  • 详解Spring MVC/Boot 统一异常处理最佳实践

    前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是一件棘手的事情, 对于很多人来说, 可能对异常处理有以下几个问题: 什么时候需要捕获(try-catch)异常, 什么时候需要抛出(throws)异常到上层. 在 dao 层捕获还是在 service 捕获, 还是在 controller 层捕获. 抛出异常后要怎么处理. 怎么返回给页面错误信息. 异常处理反例 既然谈到异常, 我们先来说一下异常处理的反例, 也是很多人容易犯的错误, 这里我们同时讲到前端处理和后端处理 : 捕获异常后

  • Spring Boot自定义错误视图的方法详解

    Spring Boot缺省错误视图解析器 Web应用在处理请求的过程中发生错误是非常常见的情况,SpringBoot中为我们实现了一个错误视图解析器(DefaultErrorViewResolver).它基于一些常见的约定,尝试根据HTTP错误状态码解析出错误处理视图.它会在目录/error下针对提供的HTTP错误状态码搜索模板或者静态资源,比如,给定了HTTP状态码404,它会尝试搜索如下模板或者静态资源: /<templates>/error/404.<ext> - 这里<

  • SpringBoot @ControllerAdvice 拦截异常并统一处理

    在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@RequestMapping中.参考:@ControllerAdvice 文档 一.介绍 创建 MyControllerAdvice,并添加 @ControllerAdvice注解. package com.sam.demo.controller; import org.springframework.ui

  • Spring Boot @Async 异步任务执行方法

    1.任务执行和调度 Spring用TaskExecutor和TaskScheduler接口提供了异步执行和调度任务的抽象. Spring的TaskExecutor和java.util.concurrent.Executor接口时一样的,这个接口只有一个方法execute(Runnable task). 1.1.TaskExecutor类型 Spring已经内置了许多TaskExecutor的实现,你没有必要自己去实现: SimpleAsyncTaskExecutor  这种实现不会重用任何线程,

  • axios对请求各种异常情况处理的封装方法

    前端采用了axios来处理网络请求,为了避免在每次请求时都去判断各种各样的网络情况,比如连接超时.服务器内部错误.权限不足等等不一而足,我对axios进行了简单的封装,这里主要使用了axios中的拦截器功能. 封装后的网络请求工具js如下 import axios from 'axios' import { Toast } from 'mint-ui' //请求时的拦截 axios.interceptors.request.use(config => { return config; }, er

  • spring boot 防止重复提交实现方法详解

    本文实例讲述了spring boot 防止重复提交实现方法.分享给大家供大家参考,具体如下: 服务器端实现方案:同一客户端在2秒内对同一URL的提交视为重复提交 上代码吧 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or

随机推荐