统一返回对象封装和统一异常捕获封装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 ...
随机推荐
- c++算法竞赛常用板子集合(持续更新)
前言 本文主要包含算法竞赛一些常用的板子,码风可能不是太好,还请见谅. 后续会继续补充没有的板子.当然我太菜了有些可能写不出来T^T 稍微有些分类但不多,原谅我QwQ 建议 Ctrl + F 以快速查 ...
- pip cmd下载速度慢解决方案
cmd下载速度慢不是电脑问题,而是下载的网站有网速限制,如pip,虽然没被墙,但由于是外网,网速极差,经常是几KB一秒,所以我们可以采用镜像服务器,即在命令后加上 -i https://pypi.tu ...
- Linxu常用命令
一.Linux权限的概念 Linux下有两种用户:普通用户和超级用户: 普通用户:在linux下做有限的事情: 超级用户:可以在linux系统下做任何事情,不受限制. 普通用户的提示符是"$ ...
- Linux进程间通信(二)
信号 信号的概念 信号是Linux进程间通信的最古老的一种方式.信号是软件中断,是一种异步通信的方式.信号可以导致一个正在运行的进程被另一个正在运行的异步进程中断,转而处理某个突发事件. 一旦产生信号 ...
- 5 why 分析法,一种用于归纳抽象出解决方案的好方法
最近在看了<微信背后的产品观 - 张小龙手抄版>,其中有段话如下: 用户需求是零散的,解决方案是归纳抽象的过程 那如何归纳抽象呢?是否有一定的实践方法论呢?经过一轮探讨和学习,有这些答案: ...
- while、for循环结合else
"""1.while else,当while循环正常结束时,才走else里的代码块,也就是没有被break打断的情况下2.此处只是不被break打断,也就是遇到break ...
- WPF之MVVM实践中的Command与CommandParameter
先记录一下,方便以后复习. https://www.cnblogs.com/babietongtianta/p/3474101.html
- nacos的使用
一:下载nacos 打开github搜索nacos,选择历史版本,建议下载1.4版本的,较稳定 https://github.com/alibaba/nacos 二:下载完后解压文件,两种方式打开 1 ...
- django启动报错:DisallowedHost at /
学习django第一天,第一次启动服务就报错,报错内容如下: DisallowedHost at / Invalid HTTP_HOST header: '192.168.116.22:8000'. ...
- Java 中九种 Map 的遍历方式,你一般用的是哪种呢?
日常工作中 Map 绝对是我们 Java 程序员高频使用的一种数据结构,那 Map 都有哪些遍历方式呢?这篇文章阿粉就带大家看一下,看看你经常使用的是哪一种. 通过 entrySet 来遍历 1.通过 ...