好久没有更新文章了,高龄开发没什么技术,去了外包公司后没怎么更新文章了。今天分享下统一处理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的更多相关文章

  1. 【Golang】如何统一处理HTTP请求中的异常捕获

    最近写GOLANG项目,不使用框架,路由选择httprouter 现在想实现一个需求:在不修改httprouter源码的前提下,对所有注册的路由handle进行异常捕获. 大家都知道golang使用p ...

  2. java统一返回标准类型

    一.前言.背景 在如今前后端分离的时代,后端已经由传统的返回view视图转变为返回json数据,此json数据可能包括返回状态.数据.信息等......因为程序猿的习惯不同所以返回json数据的格式也 ...

  3. 使用lua实现try-catch异常捕获

    lua原生并没有提供try-catch的语法来捕获异常处理,但是提供了pcall/xpcall等接口,可在保护模式下执行lua函数. 因此,可以通过封装这两个接口,来实现try-catch块的捕获机制 ...

  4. 利用过滤器Filter和特性Attribute实现对Web API返回结果的封装和统一异常处理

    在我们开发Web API应用的时候,我们可以借鉴ABP框架的过滤器Filter和特性Attribute的应用,实现对Web API返回结果的封装和统一异常处理,本篇随笔介绍利用AuthorizeAtt ...

  5. springboot统一返回json数据格式并配置系统异常拦截

    本文链接:https://blog.csdn.net/syystx/article/details/82870217通常进行前后端分离开发时我们需要定义统一的json数据交互格式并对系统未处理异常进行 ...

  6. Spring Boot API 统一返回格式封装

    今天给大家带来的是Spring Boot API 统一返回格式封装,我们在做项目的时候API 接口返回是需要统一格式的,只有这样前端的同学才可对接口返回的数据做统一处理,也可以使前后端分离 模式的开发 ...

  7. 只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

    ## 统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生. 比较通用的返回值格式如下: ```jav ...

  8. ASP.NET Core 2.2 WebApi 系列【八】统一返回格式(返回值、模型验证、异常)

    现阶段,基本上都是前后端分离项目,这样一来,就需要前后端配合,没有统一返回格式,那么对接起来会很麻烦,浪费时间.我们需要把所有接口及异常错误信息都返回一定的Json格式,有利于前端处理,从而提高了工作 ...

  9. (三)SpringBoot定义统一返回result对象

    一:定义响应码枚举 package com.example.demo.core.ret; /** * @Description: 响应码枚举,参考HTTP状态码的语义 * @author * @dat ...

  10. Java封装接口统一返回数据模板

    现在大多数都使用前后端分离开发模式,前端通过Ajax请求访问后台服务器,后台返回JSON数据供前端操作,这里编写一个统一返回数据模板类,方便日后操作 public class R extends Ha ...

随机推荐

  1. 微粒群算法PSO 01背包问题 python

    import random import math import matplotlib.pyplot as plt import numpy as np import time def init(b_ ...

  2. 「MySQL高级篇」MySQL锁机制 && 事务

    大家好,我是melo,一名大三后台练习生,最近赶在春招前整理整理发过的博客~! 引言 锁锁锁,到哪到离不开这桩琐事,并发琐事,redis琐事,如今是MySQL琐事,这其中琐事,还跟MySQL另一个重要 ...

  3. ES6 学习笔记(三)原始值与引用值

    总结: 1.原始值,表示单一的数据,如10,"abc",true等. 1.1. ES的6种原始值: Undefined.Null.Boolean.Number.String.Sym ...

  4. Day11.2:标签的使用

    标签的使用 当我们在嵌套语句中,例如当我们在for的嵌套循环语句中,想要终止或重新开始当前循环以外的循环的时候,单独仅靠break和continue和还不够,需要在我们想要作用的循环语句处加上一个标签 ...

  5. RabbitMq发布确认

    RabbitMq发布确认 发布确认原理 生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始),一旦消息被 ...

  6. Kubernetes集群管理工具kubectl

    Kubernetes集群管理工具kubectl 概述 kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装和部署 命令格式 ...

  7. 2022-11-05 Acwing每日一题

    本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ...

  8. 为什么你的static_assert不能按预期的工作?

    static_assert是c++11添加的新语法,它可以使我们在编译期间检测一些断言条件是否为真,如果不满足条件将会产生一条编译错误信息. 使用静态断言可以提前暴露许多问题到编译阶段,极大的方便了我 ...

  9. 关于deepin-wine或wine更换字体方法

    前言 首先要知道,deepin-wine打包的QQ和你自己用 deepin-wine跑的windows软件,他们所在不是同一个容器 deepin打包QQ所在的容器,在你的 ~/.deepinwine ...

  10. jmeter中下一接口依赖上一接口的参数,上一个接口存在分页时,如何在下一接口循环读取上一接口的数据?

    问题背景: 工作中性能测试存在接口数据依赖,B接口依赖A接口的数据,希望提取到A接口的数据,传入到B接口,但是A接口存在分页的情况. 如何保证A接口返回的数据未知,且每次从A接口传给B接口的数据不重复 ...