当前位置: 首页 > news >正文

异常处理和swagger使用

全局异常处理类

定义全局异常处理类,会将错误全部提交到这个异常处理类中进行处理,这个类会将处理的统一结果响应给前端,如果不添加异常处理类,异常不会按照统一的响应格式进行,前端无法识别,当然也可以在每一个方法中捕获异常,只不过过于繁琐,不采用

处理流程图解:

  • @RestControllerAdvice注解:表示此类是异常处理器且@RestControllerAdvice = @ResponseBody + @ControllerAdvice,所以这个类中的方法的返回值会自动装换为json数据类型,响应回前端

  • @ExceptionHandler注解:表示这个方法能够处理的异常,例如:@ExceptionHandler(Exception.class)表示这个方法可以处理所有异常

import com.springmybatis.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
​
/***  全局异常类*/
@Slf4j
@RestControllerAdvice     // 该注解表示这个类是捕获异常的类
public class GlobalException {
​/*** 统一响应异常结果* @param exception 异常信息* @return 统一结果*/@ExceptionHandler(Exception.class)  // 该注解表示接收所有异常信息public Result exceptionResult(Exception exception){exception.printStackTrace();log.info("出现异常");return Result.error("对不起,输入错误!");}
}

Swagger的介绍及使用

swagger官网:API Documentation & Design Tools for Teams | Swagger,swagger是开放阶段使用的框架,帮助后端后端人员进行后端的接口测试

直接使用swagger非常繁琐,这里使用Knife4j,Knife4j是为java MVC框架集成swagger生成Api文档的增强解决方案,对swagger进行封装,简化使用,可以生成接口文档,以及在线接口调试

使用方式:

1)导入knife4j的maven坐标:

<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version>
</dependency>

2)创建配置类,加入knife4j的相关配置:

创建一个普通类继承WebMvcConfigurationSupport类就是knife4j配置类

  /*** 通过knife4j生成接口文档*/@Bean // 由spring框架创建对象并管理对象public Docket docket() {ApiInfo apiInfo = new ApiInfoBuilder().title("接口文档名称").version("2.0")   // 版本号.description("描述信息(也可以是接口名)").build();Docket docket = new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).select().apis(RequestHandlerSelectors.basePackage("要扫描的controller包"))// 如:com.sky.controller.paths(PathSelectors.any()).build();return docket;}

3)设置静态资源的映射,否则静态接口文档的页面无法显示

  /*** 设置静态资源映射,重写WebMvcConfigurationSupport类中的addResourceHandlers方法* @param registry*/protected void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}

常用注解

通过注解可以控制生成的接口文档,使接口文档具有可读性

注解说明
@Api用在类上,例如Controller,表示对类的说明
@ApiModel用在类上,一般是实体类,例如entry,DTO,VO
@ApiModelProperty用在属性上,描述属性信息
@AipOperation用在方法上,例如controller的方法,说明方法的用途和作用

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Vue3时间选择器datetimerange在数据库存开始时间和结束时间
  • 人工智能技术的分析与探讨
  • Ubuntu-文件管理器中鼠标右键添加文本文件
  • 测试面试宝典(二十八)—— 请问黑盒测试和白盒测试有哪些方法?
  • Android 生成Excel并导出全流程
  • 【JAVA】Hutool CollUtil.sort 方法:多场景下的排序解决方案
  • MYSQL 第四次作业
  • 函数调用时参数是如何从右至左入栈的
  • MySQL-视图、存储过程和触发器
  • HTML常用的转义字符——怎么在网页中写“<div></div>”?
  • ArcGIS Pro SDK (九)几何 15 转换
  • 6.3 面向对象技术-设计模式
  • C++ - 基于多设计模式下的同步异步⽇志系统
  • 如何系统的学习C++和自动驾驶算法
  • SAP PP学习笔记31 - 计划运行的步骤2 - Scheduling(日程计算),BOM Explosion(BOM展开)
  • 2017 年终总结 —— 在路上
  • 30秒的PHP代码片段(1)数组 - Array
  • 5、React组件事件详解
  • CentOS 7 防火墙操作
  • eclipse的离线汉化
  • Effective Java 笔记(一)
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JAVA之继承和多态
  • Linux Process Manage
  • nfs客户端进程变D,延伸linux的lock
  • Redis学习笔记 - pipline(流水线、管道)
  • windows下mongoDB的环境配置
  • 分享几个不错的工具
  • 蓝海存储开关机注意事项总结
  • 力扣(LeetCode)21
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 线上 python http server profile 实践
  • 新手搭建网站的主要流程
  • 学习Vue.js的五个小例子
  • 学习使用ExpressJS 4.0中的新Router
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 源码安装memcached和php memcache扩展
  • 栈实现走出迷宫(C++)
  • Spring第一个helloWorld
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #07【面试问题整理】嵌入式软件工程师
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (4)Elastix图像配准:3D图像
  • (day6) 319. 灯泡开关
  • (ibm)Java 语言的 XPath API
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七