统一返回对象封装和统一异常捕获封装springboot starter
好久没有更新文章了,高龄开发没什么技术,去了外包公司后没怎么更新文章了。今天分享下统一处理starter,相信开发web系统的时候都是会涉及到前后端的交互,而后端返回数据的时候一般都会统一封装一个返回对象和统一处理异常,一般情况下都是在controller的每个方法中调用封装的对象,把相应的数据塞到data字段,然后返回给前端。而异常处理则是抛出某个业务异常,然后利用spring切面进行拦截处理。每个项目都需要做这些重复的动作,所以我把这个处理封装成了starter,下面介绍已下这个starter的使用,最后给出git库供大家学习交流。
添加依赖
添加统一处理依赖
<dependency>
<groupId>io.gitee.javalaoniu</groupId>
<artifactId>jud-springboot-starter</artifactId>
<version>0.0.1</version>
</dependency>
启用统一处理
添加 @EnableUnifiedDisposal 注解
import io.gitee.javalaoniu.jud.annotation.EnableUnifiedDisposal;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableUnifiedDisposal
@SpringBootApplication
public class JudDemoApplication {
public static void main(String[] args) {
SpringApplication.run(JudDemoApplication.class, args);
}
}
拦截的处理
像平常一样返回数据即可,不需要做其它
import io.gitee.javalaoniu.jud.annotation.IgnoreResponseAdvice;
import io.gitee.javalaoniu.jud.common.Result;
import io.gitee.javalaoniu.jud.exception.BusinessException;
import io.gitee.javalaoniu.jud.exception.ExceptionCode;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
public class DemoController {
@GetMapping("test1")
public String stringTest() {
return "hello";
// {"code":200,"data":"hello","succ":true,"ts":1673943672244}
}
@GetMapping("test2")
public String stringNullTest() {
return null;
// {"code":200,"data":"","succ":true,"ts":1673943691844}
}
@GetMapping("test3")
public Object objectEntityTest() {
DemoEntity demoEntity = new DemoEntity();
demoEntity.setName("张三");
demoEntity.setAge(50);
demoEntity.setSex(false);
demoEntity.setSalary(4500000001542.26);
return demoEntity;
// {"succ":true,"ts":1673943709119,"data":{"name":"张三","age":50,"sex":false,"salary":4.50000000154226E12},"code":200,"msg":null}
}
@GetMapping("test4")
public Object objectNotNullTest() {
return "hello Object";
// {"code":200,"data":"hello Object","succ":true,"ts":1673943726435}
}
@GetMapping("test5")
public Object objectNullTest() {
return null;
// 啥也没返回,但是如果配置了json转换器的话会返回:{"code":200,"data":null,"succ":true,"ts":1673943726435}
}
@GetMapping("test6")
public List<DemoEntity> listTest() {
DemoEntity demoEntity2 = new DemoEntity();
demoEntity2.setName("张三");
demoEntity2.setAge(50);
demoEntity2.setSex(false);
demoEntity2.setSalary(4500000001542.26);
DemoEntity demoEntity = new DemoEntity();
demoEntity.setName("张三");
demoEntity.setAge(50);
demoEntity.setSex(false);
demoEntity.setSalary(4500000001542.26);
List<DemoEntity> list = new ArrayList<>();
list.add(demoEntity);
list.add(demoEntity2);
return list;
// {"succ":true,"ts":1673943797079,"data":[{"name":"张三","age":50,"sex":false,"salary":4.50000000154226E12},{"name":"张三","age":50,"sex":false,"salary":4.50000000154226E12}],"code":200,"msg":null}
}
@GetMapping("test7")
public List<String> listNullTest() {
return null;
// {"succ":true,"ts":1673943819382,"data":null,"code":200,"msg":null}
}
@GetMapping("test8")
public Result resultTest() {
DemoEntity demoEntity = new DemoEntity();
demoEntity.setName("张三");
demoEntity.setAge(50);
demoEntity.setSex(false);
demoEntity.setSalary(4500000001542.2656564545);
return Result.success(demoEntity);
// {"succ":true,"ts":1673943832081,"data":{"name":"张三","age":50,"sex":false,"salary":4.500000001542266E12},"code":200,"msg":null}
}
@IgnoreResponseAdvice
@GetMapping("test9")
public String ignoreResponseTest() {
return "IgnoreResponseAdvice";
// IgnoreResponseAdvice
}
@GetMapping("test10")
public String businessExceptionTest() {
throw new BusinessException(ExceptionCode.EXCEPTION);
// {"succ":false,"ts":1673943862588,"data":null,"code":500,"msg":"服务器开小差,请稍后再试(Internal Server Error)"}
}
}
不拦截处理
对不需要统一处理的controller或者方法使用下面注解
@IgnoreResponseAdvice
@GetMapping("test9")
public String ignoreResponseTest() {
// 在方法上使用,直接返回IgnoreResponseAdvice字符串给前端
return "IgnoreResponseAdvice";
}
可以看到,使用统一处理starter后,统一返回对象和统一异常处理不需要自己在处理,非常方便。
git仓库地址:https://gitee.com/javalaoniu/javalaoniu-jud
统一返回对象封装和统一异常捕获封装springboot starter的更多相关文章
- 【Golang】如何统一处理HTTP请求中的异常捕获
最近写GOLANG项目,不使用框架,路由选择httprouter 现在想实现一个需求:在不修改httprouter源码的前提下,对所有注册的路由handle进行异常捕获. 大家都知道golang使用p ...
- java统一返回标准类型
一.前言.背景 在如今前后端分离的时代,后端已经由传统的返回view视图转变为返回json数据,此json数据可能包括返回状态.数据.信息等......因为程序猿的习惯不同所以返回json数据的格式也 ...
- 使用lua实现try-catch异常捕获
lua原生并没有提供try-catch的语法来捕获异常处理,但是提供了pcall/xpcall等接口,可在保护模式下执行lua函数. 因此,可以通过封装这两个接口,来实现try-catch块的捕获机制 ...
- 利用过滤器Filter和特性Attribute实现对Web API返回结果的封装和统一异常处理
在我们开发Web API应用的时候,我们可以借鉴ABP框架的过滤器Filter和特性Attribute的应用,实现对Web API返回结果的封装和统一异常处理,本篇随笔介绍利用AuthorizeAtt ...
- springboot统一返回json数据格式并配置系统异常拦截
本文链接:https://blog.csdn.net/syystx/article/details/82870217通常进行前后端分离开发时我们需要定义统一的json数据交互格式并对系统未处理异常进行 ...
- Spring Boot API 统一返回格式封装
今天给大家带来的是Spring Boot API 统一返回格式封装,我们在做项目的时候API 接口返回是需要统一格式的,只有这样前端的同学才可对接口返回的数据做统一处理,也可以使前后端分离 模式的开发 ...
- 只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常
## 统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生. 比较通用的返回值格式如下: ```jav ...
- ASP.NET Core 2.2 WebApi 系列【八】统一返回格式(返回值、模型验证、异常)
现阶段,基本上都是前后端分离项目,这样一来,就需要前后端配合,没有统一返回格式,那么对接起来会很麻烦,浪费时间.我们需要把所有接口及异常错误信息都返回一定的Json格式,有利于前端处理,从而提高了工作 ...
- (三)SpringBoot定义统一返回result对象
一:定义响应码枚举 package com.example.demo.core.ret; /** * @Description: 响应码枚举,参考HTTP状态码的语义 * @author * @dat ...
- Java封装接口统一返回数据模板
现在大多数都使用前后端分离开发模式,前端通过Ajax请求访问后台服务器,后台返回JSON数据供前端操作,这里编写一个统一返回数据模板类,方便日后操作 public class R extends Ha ...
随机推荐
- 1.轮询、长轮询、websocket简介
一.轮询 前端每隔固定时间向后台发送一次请求,询问服务器是否有新数据 缺点: 延迟,需要固定的轮询时间,不一定是实时数据 大量耗费服务器内存和宽带资源,因为不停的请求服务器,很多时候 并没有新的数 ...
- 前端性能优化——首屏时间&&白屏时间
1.首屏时间概念 首屏时间是指用户打开一个网站时,直到浏览器首页面内容渲染完成的时间. 2.白屏时间概念 白屏时间即是,浏览器开始显示内容的时间,所以我们一般认为解析完<head>的时刻, ...
- 五、Python操作redis
五.Python操作redis 一.python对redis基本操作 (1)连接redis # 方式1 import redis r = redis.Redis(host='127.0.0.1', p ...
- RDF/RDFS/OWL
RDF(Resource Description Framework 资源描述框架) 知识总是以三元组形式出现: (subject, predicate, object) 即 (主,谓,宾) 资源和属 ...
- VBA---文件操作
Text文件操作 Workbooks.OpenText() 载入一个文本文档,并将其作为包含单个工作表的新工作簿进行分列处理. 语法: 表达式.OpenText(Filename,StartRow, ...
- 接入监控视频,为啥还需要对接厂商的SDK呢,不是有onvif这样的标准协议吗?
不少人问过我这个问题,这真是一个好问题. 我举两个例子,让您仔细品: ① 快速打开视频和极致操控的问题. onvif协议很科班,但厂商的sdk可能会给你一些独特的方法,譬如先make一个I帧,这样第一 ...
- SpringBoot 01: JavaConfig + @ImportResource + @PropertyResource
springboot的前置知识:通过注解创建对象和读取配置文件 1. JavaConfig 设计思想 使用java类作为xml配置文件的替代,是配置spring容器的纯java的方式 可以创建java ...
- Centos7.6分区、格式化、自动挂载磁盘
个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying 目录 1. 添加硬盘 2. 执行fdisk -l ...
- VS 生成后事件中自动修改文件名插入当前时间
目录 rename 指令 获取当前时间 将当前时间插入名字 rename 指令 VS 生成后事件中使用的是CMD 的语法 我们重命名使用的是Rename 简单用法如下: RENAME (REN) [d ...
- C温故补缺(十三):可变参数
可变参数 stdarg.h 头文件提供了实现可变参数功能的函数和宏.具体步骤如下: 定义一个函数,最后一个参数为省略号,省略号前面可以设置自定义参数,一般传入参数的个数. int func(int n ...