异常处理和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的方法,说明方法的用途和作用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/875540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue-快速入门

Vue 前端体系、前后端分离 1、概述 1.1、简介 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;可以高效地开发用户界面。…

网络安全法规对企业做等保有哪些具体规定?

网络安全法规对企业做等保的具体规定 根据《中华人民共和国网络安全法》&#xff0c;企业作为网络运营者&#xff0c;需要履行网络安全等级保护制度的相关义务&#xff0c;确保网络安全和数据保护。具体规定包括&#xff1a; 网络安全等级保护制度&#xff1a;企业应根据网络安…

从统计学、到机器学习和ChatGPT

机器学习(Machine Learning,ML) 和统计学(Statistics)都是数据科学的重要组成部分。 机器学习的历史 早期的机器学习 1943年:沃尔特皮茨(Walter Pitts)和沃伦麦卡洛克(Warren McCulloch)在他们的论文《神经活动中的思想逻辑演算》(A Logical Calculus of the Idea…

什么是NIO

NIO&#xff08;New Input/Output&#xff09;&#xff0c;也称为Java非阻塞IO&#xff0c;是从Java 1.4版本开始引入的一个新的IO API&#xff0c;旨在提供一种比传统的阻塞IO更高效、更灵活的IO操作方式。 一 NIO用法的详细介绍 NIO支持面向缓冲区的、基于通道的IO操作&…

浏览器的最大并发数(http1.1)

HTTP/1.1&#xff1a;每个资源请求通常需要单独的TCP连接&#xff0c;尽管支持Keep-Alive机制&#xff0c;允许在同一个TCP连接上连续发送多个请求。但通常浏览器限制并发TCP连接数&#xff08;例如&#xff0c;每个域名最多6个并发连接&#xff09;。 HTTP/2&#xff1a;引入…

HarmonyOS三方库的使用

系统组件难以提供比较优秀的界面&#xff0c;需要第三方库来实现一些比较好看的界面效果 三方库的获取&#xff1a; 开源社区支持OpenHarmony-TPC 和 Openharmony三方库中心仓 先目前已经拥有各种各样的三方库&#xff0c;包括UI 图片 动画 网络 数据存储 工具类 多媒体 安全等…

leetcode 2236.判断根节点是否等于字节点

1.题目要求: 给你一个 二叉树 的根结点 root&#xff0c;该二叉树由恰好 3 个结点组成&#xff1a;根结点、左子结点和右子结点。如果根结点值等于两个子结点值之和&#xff0c;返回 true &#xff0c;否则返回 false 。2.思路: 直接数组前序遍历&#xff0c;然后判断后面两个…

unity美术资源优化(资源冗余,主界面图集过多)

图片资源冗余&#xff1a; UPR unity的性能优化工具检查资源 1.检查纹理读/写标记 开启纹理资源的读/写标志会导致双倍的内存占用 检查Inspector -> Advanced -> Read/Write Enabled选项 2.检查纹理资源alpha通道 如果纹理的alpha通道全部为0&#xff0c;或者全部为2…

UEFI DebugLib 介绍

1.我们调试中常用Debug 打印信息&#xff0c;这些会输出到BIOS串口日志中 EFI_STATUSEFIAPIHelloWorld2(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable){EFI_STATUS Status;StatusEFI_SUCCESS;gST->ConOut->OutputString(gST->ConOut,L&q…

【vluhub】zabbix漏洞

介绍&#xff1a; zabbix是对服务器资源状态例如、内存空间、CPU、程序运行状态进行检测、设置预警值、短信设置等功能等一款开源工具。配置不当存在未授权,SQL注入漏洞 弱口令 nameadmin&passwordzabbix nameguest&password POST /index.php HTTP/1.1 Host: 192.1…

docker拉取错误解决

error pulling image configuration: download failed after attempts6: dial tc 首先&#xff0c;打开 Docker 的配置文件 daemon.json。 sudo nano /etc/docker/daemon.json 1 步骤二&#xff1a;添加国内镜像源 在配置文件中添加以下内容&#xff1a; {"registry-mir…

Flex布局中元素主轴上平均分布 多余的向左对齐

content&#xff1a;父元素 content-item: 子元素 主轴上子元素平均分布 .content {display: flex;flex-wrap: wrap;justify-content: space-between;.service-item {display: flex;flex-direction: column;justify-content: center;align-items: center;width: 80px;height:…

浅层深度学习的概述

在人工智能和机器学习的领域中&#xff0c;“深度学习”已成为一个热门话题。该术语通常与多层神经网络和复杂模型联系在一起&#xff0c;然而&#xff0c;“浅层深度学习”是指那些较为简单而且通常只有一两个隐藏层的神经网络。这种模型在许多任务中表现出色&#xff0c;同时…

【C++】19.红黑树模拟实现 set 和 map

我们想要实现STL中的set和map&#xff0c;那么第一步就需要看一下库函数是如何实现的&#xff1a; 通过查看源代码我们发现两个容器都包含了stl_tree.h&#xff0c;因此我们猜测此头文件实现的是红黑树。 但是set和map很显然不是使用同一棵树实现的&#xff0c;那么STL库是怎么…

微分方程的分类

按方程中未知函数导数的最高阶数分类&#xff1a; 一阶微分方程&#xff1a;只含有一个自变量、一个未知函数及其一阶导数的方程。 二阶微分方程&#xff1a;含有未知函数最高阶导数为二阶的微分方程。 高阶微分方程&#xff1a;含有未知函数导数高于二阶的微分方程。 按照…

vue3 Axios封装使用

先安装axios&#xff1a; npm install axios 第一步&#xff1a;项目src下创建一个名为request的文件夹&#xff08;看一下示例图&#xff09;&#xff1a; 然后在request下创建两个api.ts和index.ts的文件 api.ts里的内容&#xff1a;&#xff08;url写你自己的接口&#xff…

Vscode——如何快速搜索项目工程中的某个文件的位置

第一步&#xff1a;按 shift ctrl p 第二步&#xff1a;然后把 > 删除 第三步&#xff1a;输入文件名称即可

飞书群聊机器人自定义机器人接入,并实现艾特@群成员功能

飞书群聊机器人还是比钉钉的要麻烦一点&#xff0c;钉钉的直接通过手机号就可以艾特群里面的人&#xff0c;但是飞书的要想艾特群里面的人&#xff0c;需要使用用户的 Open ID 或 User ID。这两个ID怎么获取呢&#xff1f;还需要在飞书的开放平台上创建一个应用&#xff0c;然后…

《Java初阶数据结构》----6.<优先级队列之PriorityQueue底层:堆>

前言 大家好&#xff0c;我目前在学习java。之前也学了一段时间&#xff0c;但是没有发布博客。时间过的真的很快。我会利用好这个暑假&#xff0c;来复习之前学过的内容&#xff0c;并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…

Java中堆和栈的区别

Java中堆和栈的区别 说明 栈&#xff1a;是运行时单位&#xff0c;代表着逻辑&#xff0c;内含基本数据类型和堆中对象引用&#xff0c;所在区域连续&#xff0c;没有碎片&#xff1b;堆&#xff1a;是存储单位&#xff0c;代表着数据&#xff0c;可被多个栈共享&#xff08;包…