Springboot项目返回数据统一封装

news2024/10/6 6:48:59

        Springboot项目返回数据统一封装,支持swagger。

        正常swagger会根据数据库表的注释显示对应的参数释义等。但当我们使用统一接口返回map时,部分注释等信息会被掩盖消失。在此提供三个java类即可满足统一封装返回接口,也可显示对应的swagger释义等。

1.ErrorCode.java

package com.hng.error;

/**
 * @Author: 郝南过
 * @Description: TODO
 * @Date: 2023/11/14 10:56
 * @Version: 1.0
 */
public interface ErrorCode {

    String getCode();

    String getMessage();
}

2.ErrorEnum.java

package com.hng.error;

public enum ErrorEnum implements ErrorCode {
    /**
     * 成功
     */
    SUCCESS("SUCCESS", "成功"),

    //*********************系统异常*********************//
    /**
     * 请求失败(外域请求等)
     */
    REQUEST_FAIL("REQUEST_FAIL", "请求失败"),
    /**
     * 系统异常
     */
    SYSTEM_ERROR("SYSTEM_ERROR", "系统异常"),
    /**
     * 操作超时
     */
    OP_TIMEOUT("OP_TIMEOUT", "操作超时,请重试"),
    /**
     * 操作冲突(乐观锁、并发)
     */
    OP_CONFLICT("OP_CONFLICT", "操作冲突"),
    /**
     * 数据库执行错误
     */
    DB_ERROR("DB_ERROR", "数据库执行错误"),

    //*********************业务类异常*********************//
    /**
     * 参数错误
     */
    PARAMETER_ERROR("PARAMETER_ERROR", "参数错误"),
    /**
     * 没有权限
     */
    NO_PRIVILEGE("NO_PRIVILEGE", "没有权限"),
    /**
     * 数据异常(数据校验不通过等)
     */
    DATA_ERROR("DATA_ERROR", "数据异常"),
    /**
     * 数据不存在(数据校验等)
     */
    DATA_NOT_FOUND("DATA_NOT_FOUND", "数据不存在"),
    /**
     * 数据已存在(数据校验等)
     */
    DATA_EXIST("DATA_EXIST", "数据已存在");


    /**
     * 结果码
     */
    private String code;

    /**
     * 结果信息
     */
    private String message;

    ErrorEnum(String code, String message) {
        this.code = code;
        this.message = message;
    }

    @Override
    public String getCode() {
        return this.code;
    }

    @Override
    public String getMessage() {
        return this.message;
    }
}

 3.Result.java

package com.hng.response;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.hng.error.ErrorEnum;
import lombok.Data;

@Data
public class Result<T> {
    private String code;
    private String msg;
    private T data;

    @JsonIgnore
    public boolean getSuccess() {
        return this.code.equals(ErrorEnum.SUCCESS.getCode());
    }

    private Result(String code, String  msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    private Result(ErrorEnum errorEnum, T data) {
        this.code = errorEnum.getCode();
        this.msg = errorEnum.getMessage();
        this.data = data;
    }

    public static <T> Result<T> Result(ErrorEnum errorEnum, T data) {
        return new Result<>(errorEnum, data);
    }

    public static <T> Result<T> Result(String code, String msg, T data) {
        return new Result<>(code, msg, data);
    }
}

4.controller中使用

    @ResponseBody
    @PostMapping("/getUser")
    public Result<SysUser> getUserById(@RequestParam Long userId){
        SysUser sysUser = sysUserService.getUserById(userId);
        if (Objects.isNull(sysUser)) {
            return Result.Result(ErrorEnum.DATA_NOT_FOUND, null);
        }
        return Result.Result(ErrorEnum.SUCCESS, sysUser);
    }

5.结果展示

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

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

相关文章

Arthas应用诊断

一、介绍 rthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c…

全数字系列-麦克风K歌模组-搭配投影仪专业方案

麦克风学名传声器&#xff0c;是将声音信号转换为电信号的能量转换器件&#xff0c;也称话筒、微音器&#xff1b;主要包括拾音面和信号放大电路&#xff1b;利用微机械加工技术制作出来的电能换声器&#xff0c;具有体积小、频响特性好、噪声低、高集成度和适于大批量生产的特…

每日一题----昂贵的婚礼

#include <iostream> #include <algorithm> #include <cstring> #include <queue> #include <vector> using namespace std; //本题酋长的允诺也算一个物品,最后一定要交给酋长&#xff0c;那么等级不能超过酋长的等级范围const int N 150 * 15…

简单理解路由重分发(用两路由器来理解)

相关命令&#xff1a; default-information originate //*重分发默认路由 redistribute rip subnets //*重分发rip redistribute ospf 1 metric 3 //*重分发ospf&#xff08;其中&#xff1a;1是ospf进程id 3是跳数&#xff09; redistribute sta…

asp.net core mvc之 过滤器

过滤器允许我们在Action执行之前和执行之后去执行一下业务代码 一、过滤器的作用域 1、全局过滤器&#xff0c; 在Startup.cs文件中注册 2、控制器过滤器&#xff0c; 在控制器类上面使用标注 3、action过滤器 二、全局过滤器使用 1、在 core 目录&#xff0c;添加 TestA…

LeetCode反转链表的五种Java实现方式

给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a; 输入&a…

Mysql中的JDBC编程

JDBC编程 1.JDBC的数据库编程2.JDBC工作原理3.JDBC使用3.1JDBC开发案例3.2JDBC使用步骤总结 4.JDBC API4.1数据库连接Connection4.2 Statement对象4.3 ResultSet对象4.4 释放 5.Java代码操作数据库 1.JDBC的数据库编程 JDBC&#xff0c;即Java Database Connectivity&#xff0…

Java中生成指定字体的印章

文章目录 1.引入字体2.Windows环境下3. Linux环境下 生成印章测试类绘制方章测试类 1.引入字体 2.Windows环境下 如果在Windows上安装JAVA环境时&#xff0c;没有安装单独的jre1.8.0_141的话。那么字体就只放到\jdk1.8.0_141\jre\lib\fonts目前下。 3. Linux环境下 cat /etc…

11111

#include <iostream> #include <vector> #include <queue> #include <algorithm>using namespace std;// 边的结构体 struct Edge {int src, dest, weight;// 按照权重进行排序bool operator<(const Edge& other) const {return weight < ot…

win10资源管理器占用CPU过高导致卡顿

win10 打开几个文件夹后 资源管理器占用CPU 飙升&#xff0c;卡的很难受&#xff0c;网上找了几个办法 关闭 小娜&#xff0c;关闭搜索 什么的 都没明显改善&#xff0c;还有损招&#xff0c;重启资源管理器&#xff0c;重启一次 20多秒&#xff0c;要不了多长时间就会再次卡…

echarts实现不展示X轴Y轴轴线、刻度

今日工作中需要实现折线图的简图&#xff0c;就是只看个大概趋势不展示具体坐标&#xff0c;查阅了文档记录一下。 initCharts(_id, _name, yAxisData, _unit){if(this[_id]) this[_id].clear();this[_id] $echarts.init(document.getElementById(_id));const options {grid…

settings.json配置

settings.json配置 {"editor.tabSize": 2,"git.ignoreWindowsGit27Warning": true,"workbench.editor.untitled.hint": "hidden","security.workspace.trust.untrustedFiles": "open","[vue]": {"…

老师的保命大法

数字化高度发达的今天&#xff0c;成绩查询系统已经成为学校教育中不可或缺的一部分。不同于传统的成绩公布方式&#xff0c;成绩查询系统更加高效、便捷&#xff0c;同时也充分保障了每位学生的隐私&#xff0c;今天就来揭秘这个教师保命大法&#xff01; 1、代码查询法 对于…

docker内更新显卡cuda cudnn

当前docker使用的cuda为10.2&#xff0c;为保证服务器环境使用相同的cuda版本&#xff0c;需对cuda版本进行升级&#xff0c;时间长了忘记如何操作&#xff0c;此处记录一下&#xff1a; *docker内使用的cuda版本低于容器外的显卡驱动版本即可&#xff0c;此处不对显卡驱动进行…

HTML5学习系列之实用性标记

HTML5学习系列之实用性标记 前言实用性标记高亮显示进度刻度时间联系信息显示方向换行断点标注 总结 前言 学习记录 实用性标记 高亮显示 mark元素可以进行高亮显示。 <p><mark>我感冒了</mark></p>进度 progress指示某项任务的完成进度。 <p…

程序员兼职平台有哪些?这样写兼职简历让你收入直接飙升30k!

这是著名程序员兼职平台 “猿急送”的分享资料&#xff0c;猿急送2015年成立&#xff0c;国内最早最领先的程序员兼职平台&#xff0c;今天跟大家继续讲一下在程序员兼职平台里接单的一个重要问题&#xff1a;怎样写好个人兼职简历&#xff1f;&#xff08;想直接看主流程序员兼…

图形化探索:快速改造单实例为双主、MGR、读写分离等架

单机GreatSQL/MySQL调整架构为多副本复制的好处有哪些&#xff1f;为什么要调整&#xff1f; 性能优化&#xff1a;如果单个GreatSQL服务器的处理能力达到瓶颈&#xff0c;可能需要通过主从复制、双主复制或MGR&#xff0c;以及其他高可用方案等来提高整体性能。通过将读请求分…

SoftwareTest7 - JUnit 是个啥 ? 他跟 Selenium 有什么关系 ?

JUnit 是个啥 ? 他跟 Selenium 有什么关系 ? 一 . 相关注解1.1 Test1.2 BeforeEach1.3 BeforeAll1.4 AfterEach1.5 AfterAll 二 . 断言2.1 assertEquals2.2 assertNotEquals2.3 assertTrue / assertFalse : 断言结果为真/假2.4 assertNull / assertNotNull : 断言结果为空 / …

数据结构—内部排序(下)

文章目录 8.内部排序(下)(6).归并排序#1.先做合并#2.再来排序#3.代码实现#4.稳定性与时间复杂度分析 (7).快速排序#1.算法思想#2.代码实现#3.稳定性与时间复杂度分析 (8).基数排序#1.算法思想#2.稳定性和时间复杂度分析 小结 8.内部排序(下) (6).归并排序 那我们的时间复杂度还…

【评论送书】十本架构师成长和软件架构技术相关的好书(可以任选)

正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 参与规则 本次送书1~5本参与方式&#xff1a;关注博主、点赞、收藏、评论&#xff08;从评论区…