Kevin's blog Kevin's blog
首页
  • Java基础
  • Java高级
  • MySQL
  • JDBC
  • Java 8新特性
  • 原生Servlet
  • 延迟队列
  • 分布式事务
  • ActiveMQ
  • Elasticsearch
  • Stream API
  • Redis 实战(黑马程序员)
  • Redis 课程(尚硅谷)
  • Redis数据类型和常用命令
  • 版本控制
  • Spring Framework
  • Spring MVC Framework
  • MyBatis Framework
  • MyBatis Plus Framework
  • Spring Boot Framework
  • 韩顺平 Spring Boot Framework
  • 在线教育
  • 谷粒商城 - 分布式基础 高级 集群
  • 谷粒商城 - 详细开发文档
  • docker基础
  • docker-compose容器编排
  • docker swarm集群管理
  • Vue2基础
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Kevin

Java系统笔记
首页
  • Java基础
  • Java高级
  • MySQL
  • JDBC
  • Java 8新特性
  • 原生Servlet
  • 延迟队列
  • 分布式事务
  • ActiveMQ
  • Elasticsearch
  • Stream API
  • Redis 实战(黑马程序员)
  • Redis 课程(尚硅谷)
  • Redis数据类型和常用命令
  • 版本控制
  • Spring Framework
  • Spring MVC Framework
  • MyBatis Framework
  • MyBatis Plus Framework
  • Spring Boot Framework
  • 韩顺平 Spring Boot Framework
  • 在线教育
  • 谷粒商城 - 分布式基础 高级 集群
  • 谷粒商城 - 详细开发文档
  • docker基础
  • docker-compose容器编排
  • docker swarm集群管理
  • Vue2基础
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 项目 在线教育

    • 项目简介

    • Mybatis Plus入门

    • 课程中心微服务搭建

      • 数据库设计
      • 创建项目实现讲师列表查询和删除
      • 配置Swagger2生成API接口文档
      • 统一返回结果对象
      • 分页和条件查询
      • 新增和修改
      • 统一异常处理
        • 一、什么是统一异常处理
          • 1、制造异常
          • 2、Swagger中测试逻辑删除功能
          • 3、什么是统一异常处理
        • 二、统一异常处理
          • 1、创建统一异常处理器
          • 2、扫描异常处理器
          • 3、测试
        • 三、处理特定异常
          • 1、添加枚举
          • 2、添加异常处理方法
          • 3、测试
          • 4、恢复制造的异常
        • 四、另一个例子
          • 1、制造异常
          • 2、添加枚举
          • 3、添加异常处理方法
          • 4、测试
        • 五、自定义异常
          • 1、创建自定义异常类
          • 2、添加枚举
          • 3、业务中需要的位置抛出GuliException
          • 4、添加异常处理方法
      • 统一日志处理
    • 前后端分离相关知识

    • 后台管理系统前端页面的搭建

    • 整合阿里云OSS文件上传

    • 使用POI实现Excel导入导出

    • 整合POI实现课程类目管理

    • 课程基本信息管理

    • 课程章节信息管理

    • 课程课时管理

    • 使用阿里云视频点播

    • 媒资管理

    • spring cloud服务发现和服务调用

    • 整合ECharts实现统计分析

    • 服务端渲染NUXT

    • 整合阿里云播放器

    • 微服务安全

    • 整合微信登录

    • spring cloud zuul 微服务网关在项目中的应用

    • 总结

  • 项目 谷粒商城

  • 项目 谷粒商城详细开发文档

  • Project
  • 项目 在线教育
  • 课程中心微服务搭建
zhihuanwang
2023-09-25
目录

统一异常处理

# 一、什么是统一异常处理

# 1、制造异常

Teacher.java中屏蔽下面代码

// @TableField(value = "is_deleted")
private Boolean deleted;
1
2

# 2、Swagger中测试逻辑删除功能

查看结果

# 3、什么是统一异常处理

我们想让异常结果也显示为统一的返回结果对象,并且统一处理系统的异常信息,那么需要统一异常处理

# 二、统一异常处理

# 1、创建统一异常处理器

guli-framework-common中创建com.guli.common.handler包,

创建统一异常处理类GlobalExceptionHandler.java:

package com.guli.common.handler;

/**
 * 统一异常处理类
 */
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public R error(Exception e){
        e.printStackTrace();
        return R.error();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 2、扫描异常处理器

在EduApplication.java上添加注解@ComponentScan

@SpringBootApplication
@ComponentScan(basePackages={"com.guli.edu","com.guli.common"})
public class EduApplication {
1
2
3

# 3、测试

返回统一错误结果

img

# 三、处理特定异常

# 1、添加枚举

ResultCodeEnum.java中添加

,
BAD_SQL_GRAMMAR(false, 21001, "sql语法错误");
1
2

# 2、添加异常处理方法

GlobalExceptionHandler.java中添加

@ExceptionHandler(BadSqlGrammarException.class)
@ResponseBody
public R error(BadSqlGrammarException e){
    e.printStackTrace();
    return R.codeEnum(ResultCodeEnum.BAD_SQL_GRAMMAR);
}
1
2
3
4
5
6

# 3、测试

img

# 4、恢复制造的异常

@TableField(value = "is_deleted")
private Boolean deleted;
1
2

# 四、另一个例子

# 1、制造异常

在swagger中测试新增讲师方法,输入非法的json参数,得到

HttpMessageNotReadableException
1

# 2、添加枚举

ResultCodeEnum.java中添加

,
JSON_PARSE_ERROR(false, 21002, "json解析异常");
1
2

#

# 3、添加异常处理方法

GlobalExceptionHandler.java中添加

@ExceptionHandler(HttpMessageNotReadableException.class)
@ResponseBody
public R error(JsonParseException e){
    e.printStackTrace();
    return R.setResult(ResultCodeEnum.JSON_PARSE_ERROR);
}
1
2
3
4
5
6

# 4、测试

img

# 五、自定义异常

# 1、创建自定义异常类

common模块中创建com.guli.common.exception包,

创建GuliException.java通用异常类 继承 RuntimeException

RuntimeException 对代码没有侵入性

package com.guli.common.exception;

@Data
@ApiModel(value = "全局异常")
public class GuliException extends RuntimeException {

    @ApiModelProperty(value = "状态码")
    private Integer code;

    /**
     * 接受状态码和消息
     * @param code
     * @param message
     */
    public GuliException(Integer code, String message) {
        super(message);
        this.code=code;
    }

    /**
     * 接收枚举类型
     * @param resultCodeEnum
     */
    public GuliException(ResultCodeEnum resultCodeEnum) {
        super(resultCodeEnum.getMessage());
        this.code = resultCodeEnum.getCode();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# 2、添加枚举

ResultCodeEnum.java中添加

,
PARAM_ERROR(false, 21002,"参数不正确");
1
2

# 3、业务中需要的位置抛出GuliException

讲师controller中分页查询方法中判断参数是否合法

public R pageQuery(......){

    if(page <= 0 || limit <= 0){
        //throw new GuliException(21003, "参数不正确1");
        throw new GuliException(ResultCodeEnum.PARAM_ERROR);
    }
    ......
}
1
2
3
4
5
6
7
8

# 4、添加异常处理方法

GlobalExceptionHandler.java中添加

@ExceptionHandler(GuliException.class)
@ResponseBody
public R error(GuliException e){
    e.printStackTrace();
    return R.error().message(e.getMessage()).code(e.getCode());
}
1
2
3
4
5
6
编辑 (opens new window)
上次更新: 2024/06/15, 15:12:25
新增和修改
统一日志处理

← 新增和修改 统一日志处理→

最近更新
01
04.Spring Boot 韩顺平
10-12
02
day14
08-29
03
day09
08-29
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式