Spring Boot 统一封装返回结果与枚举错误码(完整解决方案)

详解Spring boot/Spring 统一错误处理方案的使用 主要介绍了详解Spring boot/Spring 统一错误处理方案的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 立即下载

Spring Boot 统一封装返回结果与枚举错误码(完整解决方案)

一、前言

在 Spring Boot 项目开发中,如果不统一接口返回格式,前端会对接多种返回结构,增加调试和维护成本。同时错误码分散在代码中、硬编码提示语,会导致维护困难、错误信息不统一、不利于国际化和接口规范化。

本文实现一套企业级通用方案:

  • 统一接口返回结果实体类

  • 统一枚举错误码(系统码 + 业务码)

  • 自定义业务异常

  • 全局异常统一处理

  • 完整测试接口演示

统一返回格式标准:

{
  "code": 200,
  "msg": "操作成功",
  "data": {}
}

二、核心结构说明

项目核心 4 个核心类:

  1. Result:统一返回结果封装类

  2. ResultEnum:全局状态码、错误码枚举

  3. BusinessException:自定义业务异常

  4. GlobalExceptionHandler:全局异常处理器

三、代码实现

3.1 统一返回结果实体类 Result

所有接口统一返回该实体,提供成功、失败静态方法,简化代码。

import lombok.Data;

/**
 * 统一接口返回结果封装
 */
@Data
public class Result<T> {

    /**
     * 响应码
     */
    private Integer code;

    /**
     * 响应信息
     */
    private String msg;

    /**
     * 响应数据
     */
    private T data;

    // ==================== 成功响应 ====================
    public static <T> Result<T> success() {
        return success(null);
    }

    public static <T> Result<T> success(T data) {
        Result<T> result = new Result<>();
        result.setCode(ResultEnum.SUCCESS.getCode());
        result.setMsg(ResultEnum.SUCCESS.getMsg());
        result.setData(data);
        return result;
    }

    // ==================== 失败响应 ====================
    public static <T> Result<T> fail(ResultEnum resultEnum) {
        Result<T> result = new Result<>();
        result.setCode(resultEnum.getCode());
        result.setMsg(resultEnum.getMsg());
        return result;
    }

    public static <T> Result<T> fail(Integer code, String msg) {
        Result<T> result = new Result<>();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }
}

3.2 全局错误码枚举 ResultEnum

统一管理所有状态码,分为:系统通用码、业务自定义码,可根据业务扩展。

/**
 * 全局统一返回码枚举
 * 约定:2xx 成功,4xx 客户端错误,5xx 服务端错误,10xx 业务自定义错误
 */
public enum ResultEnum {

    // 成功
    SUCCESS(200, "操作成功"),

    // 客户端错误
    PARAM_ERROR(400, "参数校验失败"),
    UNAUTHORIZED(401, "未登录或token失效"),
    FORBIDDEN(403, "权限不足,禁止访问"),
    NOT_FOUND(404, "请求资源不存在"),

    // 服务端错误
    SERVER_ERROR(500, "服务器内部异常"),

    // 业务自定义错误码(根据业务自行扩展)
    USER_NOT_EXIST(1001, "用户不存在"),
    USER_PASSWORD_ERROR(1002, "密码错误"),
    USER_ACCOUNT_LOCK(1003, "账号已被锁定"),
    DATA_IS_EMPTY(1004, "数据不存在"),
    REPEAT_SUBMIT(1005, "请勿重复提交");

    private final Integer code;
    private final String msg;

    ResultEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}

3.3 自定义业务异常 BusinessException

用于业务代码中主动抛出异常,配合全局异常处理器统一返回。

/**
 * 自定义业务异常
 */
public class BusinessException extends RuntimeException {

    private Integer code;
    private String msg;

    public BusinessException(ResultEnum resultEnum) {
        super(resultEnum.getMsg());
        this.code = resultEnum.getCode();
        this.msg = resultEnum.getMsg();
    }

    public BusinessException(Integer code, String msg) {
        super(msg);
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}

3.4 全局异常处理器 GlobalExceptionHandler

拦截系统异常、业务异常、参数异常,统一封装为 Result 返回,保证接口格式统一。

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 全局统一异常处理
 */
@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 自定义业务异常
     */
    @ExceptionHandler(BusinessException.class)
    public Result<Void> businessExceptionHandler(BusinessException e) {
        return Result.fail(e.getCode(), e.getMsg());
    }

    /**
     * 参数校验异常
     */
    @ExceptionHandler(IllegalArgumentException.class)
    public Result<Void> paramExceptionHandler(IllegalArgumentException e) {
        return Result.fail(ResultEnum.PARAM_ERROR.getCode(), e.getMessage());
    }

    /**
     * 系统全局异常
     */
    @ExceptionHandler(Exception.class)
    public Result<Void> exceptionHandler(Exception e) {
        e.printStackTrace();
        return Result.fail(ResultEnum.SERVER_ERROR);
    }
}

四、测试接口使用示例

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class TestController {

    /**
     * 正常返回示例
     */
    @GetMapping("/success")
    public Result<String> success() {
        return Result.success("请求成功,Hello SpringBoot");
    }

    /**
     * 业务异常抛出示例
     */
    @GetMapping("/user/{id}")
    public Result<Void> getUser(@PathVariable Integer id) {
        // 模拟业务判断
        if (id == null || id <= 0) {
            throw new BusinessException(ResultEnum.PARAM_ERROR);
        }
        if (id == 999) {
            throw new BusinessException(ResultEnum.USER_NOT_EXIST);
        }
        return Result.success();
    }
}

五、返回效果演示

5.1 成功响应

{
  "code": 200,
  "msg": "操作成功",
  "data": "请求成功,Hello SpringBoot"
}

5.2 业务异常响应

{
  "code": 1001,
  "msg": "用户不存在",
  "data": null
}

5.3 参数异常响应

{
  "code": 400,
  "msg": "参数校验失败",
  "data": null
}

六、使用规范与扩展技巧

6.1 编码规范

  • 所有接口必须返回 Result 泛型对象,禁止直接返回实体、字符串、布尔值;

  • 业务校验不通过,优先抛出 BusinessException,不手动 return 失败结果;

  • 所有错误描述统一维护在 ResultEnum,禁止代码硬编码错误提示文字。

6.2 错误码设计规范

  • 200:统一成功码

  • 4xx:客户端错误(参数、权限、未登录)

  • 5xx:服务端未知异常

  • 10xx / 11xx...:自定义业务错误码,可按模块分段(用户、订单、支付等)

6.3 可扩展方向

  • 增加国际化 i18n:错误信息从配置文件读取,支持多语言;

  • 增加日志打印:全局异常中记录请求参数、异常堆栈,方便排查问题;

  • 增加分页结果封装:基于 Result 扩展 PageResult 分页返回实体;

  • 统一 API 文档注解,配合 Swagger/OpenAPI 生成标准响应示例。

七、总结

通过这套统一返回结果 + 枚举错误码方案,彻底解决了 Spring Boot 项目接口返回格式混乱、错误码零散、异常处理不统一的问题。代码低侵入、通用性强、符合企业级开发规范,可直接引入任何 Spring Boot 项目使用。

语义通信实战:跳过“比特”保“语义”,手把手构建轻量级图像压缩重建网络(基于PyTorch) 本文详细介绍了基于PyTorch的轻量级语义通信系统LICRnet的实现,专注于图像压缩重建中的语义信息保留。通过深度可分离卷积、可变窗口多尺度注意力等创新技术,显著降低计算量并提升性能,特别适用于无人机巡检、远程医疗等物联网场景。文章包含完整的代码实现、训练策略及部署优化方案。 阅读详情

相关推荐

高通Camera HAL3调试实战:如何用camxoverridesettings.txt高效抓取日志与dump图像数据

本文深入探讨了高通Camera HAL3调试中camxoverridesettings.txt文件的高效应用,重点介绍了如何通过该文件精准控制日志输出级别与dump图像数据,帮助开发者快速定位移动影像系统中的问题。文章详细解析了日志分级配置、图像数据捕获技巧及典型问题排查流程,为高通Camera HAL3项目开发提供了实用技术点。

weixin_30315905的博客 861

java05:封装前端页面数据的结果类

①新建返回结果中的代码类 ResultCode.java /** * 枚举了一些常用API操作码 */ public enum ResultCode implements IErrorCode { SUCCESS(200, "操作成功"), FAILED(500, "操作失败"), VALIDATE_FAILED(404, "参数检验失败"), UNAUTHO...

Arvan91的博客 2405

【Flink】状态编程: 订单超时告警

文章目录一、基础概念二、Flink状态编程1、支持的状态类型2、Managed Keyed State六种类型基本API状态的生命周期3、Managed Operator State三、案例:订单延迟告警统计1、需求描述2、需求分析3、数据与模型4、详细实现 一、基础概念 在Flink架构体系中,有状态计算可以说是Flink非常重要的特性之一。 有状态计算是指: 在程序计算过程中,在Flink...

一只皮皮熊 2861

Springboot项目统一错误码

效仿http常见错误码比如404(未找到),200(成功)等,在此基础上进行拓展,比如4开头就是客户端问题,5开头就是系统内部异常。有任何错误,我们都直接返回-1,其实它的意义不是特别好,前端不知道-1是什么,后端可能也不。-1代表什么,而http的错误码又太少 且可能跟我们的实际业务没有太大关联,所以说我们要定义一个通用的错误码,我们要定义一套错误码的规范。

m0_61721601的博客 832

SAP LSMW数据批导操作手册及跨客户端传输方法(涉及默认值配置,及多余字段如何删除)

SAP LSMW数据批导操作手册及跨客户端传输方法

我好像病了的博客 6084

保姆级教程:在Windows/Mac上从零部署清华Kronos股票预测模型(含Qlib数据更新避坑指南)

本文提供了一份详细的指南,帮助用户在Windows和Mac系统上从零部署清华Kronos股票预测模型,包括环境配置、模型权重获取、Qlib数据更新避坑等关键步骤。特别针对国内用户遇到的网络问题和数据更新不及时提供了解决方案,适合量化投资和金融科技爱好者快速上手。

weixin_29053577的博客 623

django使用ajax报错:"forbidden (CSRF token missing or incorrect.): /user/register/"

django使用ajax报错:“forbidden (CSRF token missing or incorrect.): /user/register/” 报错内容如下: [22/Jan/2019 03:44:00] "GET / HTTP/1.1" 404 2015 [22/Jan/2019 03:44:11] "GET /user/register/ HTTP/1.1" 200 4308 F...

Darkman_EX的博客 5532

用Java实现森林冰火人游戏

g.drawString("游戏结束", CELL_SIZE * COLS / 2 - 100, CELL_SIZE * ROWS / 2);g.drawString("难度级别: " + difficultyLevel, 10, CELL_SIZE * ROWS + 60);g.drawString("生命值: " + playerHealth, 10, CELL_SIZE * ROWS + 20);setTitle("森林冰火人");

2401_82778412的博客 1734

【SpringBoot】统一异常处理

springboot统一异常处理

qq_37038626的博客 3480

Hermes Agent 常见报错排查与问题解决

Hermes Agent 常见报错排查指南 摘要 本文全面梳理了 Hermes Agent 使用过程中的10类常见报错,按阶段划分为安装期、运行期认证类、后端基础设施类和长任务执行类四大类,并提供了系统化的排查流程: 安装期问题:包括命令未找到和Python版本不兼容,主要检查PATH环境和Python版本是否符合要求 认证类问题:涉及API Key认证失败和速率限制,需要验证密钥配置和配额状态 基础设施问题:包含Docker报错、MCP连接失败和OAuth令牌过期,需检查相关服务状态 执行类问题:主要是上

简简单单Onlinezuozuo 1343

置顶必读(1) | 2026最新首发,全网最全 Spring Boot 学习宝典(附思维导图)

从0到1以知识点+实例+项目的教学模式对SpringBoot框架由浅入深进行学习,快来跟bug菌一起学习吧。

**My Coding Family** 16万+

SpringBoot之统一返回格式与统一异常处理

文章目录导入Jar包配置统一结果返回配置全局异常处理效果测试 在任何接口返回数据时,正确的返回格式: code:状态码 data:数据 message:接口响应信息,一般接口需要的就是这三个数据。 { "code": 200, "data": "success", "message": "成功" } 但是如果在每一个接口都这样写一个Map返回,或者一个工具类返回,但是这样代码的重复量太复杂。 统一返回的好处:接口返回的东西直接返回,接口的中不用管状态码和响应信息 导入Jar包 &l

不要用过去的错误约束现在的自己。 2668

手把手教你学Simulink--电机控制架构与算法实现​场景示例:基于Simulink的电机速度环PID调节仿真

本文带你完成了电机速度环PID参数的科学整定,实现了:✅ 理解了速度环的级联系统特性与关键参数影响工程整定法(理论初值)系统辨识法(参数未知时)✅ PID Tuner自动调参(推荐!自动调参兼具快速性与鲁棒性✅ 学会了前馈补偿抗饱和等工程实用技巧。

MHD0815的博客 653

Spring Boot 统一响应结果封装详解

Spring Boot统一响应封装详解 本文介绍了Spring Boot项目中统一响应结果封装的重要性和实现方法。统一封装能标准化接口响应格式,提高代码可维护性,增强系统健壮性,提升用户体验。文中提供了完整的ApiResponse封装类实现,包含状态码枚举、静态工厂方法,支持泛型数据返回。该设计遵循了状态码分层规范(2xx成功、4xx客户端错误、5xx服务端错误、1000+业务自定义),并提供了详细的注释说明和示例用法。通过静态工厂方法如success()和error(),开发者可以便捷地构建统一格式的响应

python15397的博客 640

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

springboot统一封装返回结果_Spring Boot 优雅返回统一封装结果

在实际开发中,项目都是前后端分离项目 json 数据格式交互;需要定义统一的返回格式;在处理业务,需要定义不同的业务错误码用来区分程序错误,统一方便管理和排查 bug 定位;@Data // lombokpublic class R<T> implements Serializable { private static final long serialVersionUID...

weixin_31975689的博客 1943

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java返回结果集封装

1、返回消息统一定义文件ResultCode package com.woniuxy.springboot_mybatis.util; public enum ResultCode implements IErrorCode { SUCCESS(200,"操作成功"), FAILED(500,"操作失败"), VALIDATE_FAILED(404,"参数检验失败"), UNAUTHORIZED(401,"暂未登陆或相关token已经过期"), FORBIDDEN(

syf_jajer的博客 579

spring boot 统一JSON格式的接口返回结果

前后端分离的项目开发前,会提前规定好数据返回格式,本文以JSON为例。 第一步,定义好JavaBean。 package com.yclouds.myhelper.web.response; import com.fasterxml.jackson.annotation.JsonIgnore; import com.yclouds.myhelper.web.error.code.BaseE...

IT小跟班 9537

Spring Boot 统一返回格式 + 全局异常处理(实战版)

先定义一个枚举类,管理所有接口的状态码和对应提示信息,避免硬编码错误码,便于后续维护(可根据项目需求扩展)。/*** 统一返回状态码枚举* 规范:200=成功,4xx=客户端错误,5xx=服务端错误,自定义错误码从1000开始*/// 成功状态SUCCESS(200, "操作成功"),// 客户端错误(4xx)PARAM_ERROR(400, "参数错误"),NOT_FOUND(404, "资源不存在"),METHOD_NOT_ALLOWED(405, "请求方法不允许"),

码客日记的博客 1252

Spring Boot 统一返回对象与统一异常处理实战(附完整代码)

本文详细介绍如何在 Spring Boot 项目中实现统一返回对象和统一异常处理,包含完整代码和使用示例,可直接复制使用。

weixin_43664855的博客 213

Spring Boot项目系列(3)项目中统一异常处理,统一标准返回格式,统一错误返回码

spring boot 项目 (3)----controller层,统一异常处理,统一标准返回格式,统一错误返回码     前言 spring boot 项目中的MVC分层,在controller层我们需要做的是什么,统一项目中的返回格式,统一异常的统一处理,统一错误的返回码。项目中的三个统一息息相关,互相联系。 项目架构     1.统一标准返回格式      项目中在controller层出现的各种返回,例:List ,Map<String,Object&

weixin_43704107的博客 1065

统一返回结果类封装

写完之后就可以直接使用Result类来处理啦。定义 Result 结果类。

weixin_46668257的博客 300

springboot整合返回数据统一封装

springboot整合返回数据统一封装

qq_42405688的博客 1337

Spring Boot 实战:一站式搞定接口统一返回 + 全局异常处理 + 参数校验,告别重复编码!

作为 Java 后端开发者,你是否每天都在重复做这些工作?每个接口手动拼接返回格式,一会返回Map,一会返回自定义对象,前端对接直呼崩溃;接口里充斥着大量try-catch,代码臃肿不堪,异常处理杂乱无章;对接口参数做校验时,写一堆if-else判断,比如 “用户名不能为空”“手机号格式不正确”,冗余代码占了半屏;如果你正被这些问题困扰,那这篇博客绝对能帮你彻底解决!本文将基于 Spring Boot 实现接口统一返回结果封装 + 全局异常处理 + 优雅参数校验。

2301_78440479的博客 913

Spring Boot中如何封装接口返回状态码的组件?

一、设计思路 通用组件一般写在common下 首先创建一个iErrorCode接口 public interface IErrorCode { long getCode(); //获取状态码 String getMessage(); //获取描述信息 } 创建一个ComonCode枚举类,封装了一些通用状态码去实现IErrorCode接口 public enum CommonCode implements IErrorCode{ S

ouyangsong的博客 1099

WeBlog 统一响应与异常处理:Response 封装 + 全局异常拦截的设计艺术

作为一套基于 Spring Boot + Vue 3.2 + Vite 4.3 的前后端分离个人博客系统(也是广受好评的 Java 毕业设计项目),WeBlog 在接口设计上有一个非常值得新手学习的亮点:**统一响应封装(Response 封装)与全局异常拦截**。几乎所有接口都返回结构一致的 JSON,所有异常都被集中兜底,前端拿到数据就能直接渲染,拿到错误就能统一提示。这篇文章就带你拆解这套设

gitblog_00180的博客 206

【项目扩展实战|第3篇】Spring Boot 统一异常处理和业务异常封装

前面我们已经完成了 JWT 登录认证和 Redis 验证码登录,这两个功能都属于比较典型的业务接口开发。但是在真实项目里面,只会写正常流程还不够。比如登录时密码错误、验证码错误、用户不存在、参数为空、数据库操作异常,这些情况都需要给前端返回明确的错误信息。如果每个 Controller 里面都写一堆,代码会变得非常乱。统一异常处理和业务异常封装。自定义业务异常定义统一错误码枚举ResultCode使用统一捕获异常在 Service 层主动抛出业务异常让 Controller 层保持干净。

2401_88139521的博客 338
上一篇: Spring Boot 全局跨域配置与前后端联调避坑
下一篇: 基于Spring Boot的校园二手交易系统
码客日记
博客等级 码龄6年 149粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码客日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值