SpringBoot统一返回处理和全局异常处理

news2025/1/7 5:54:35

统一接口返回

前后端分离项目,通常后端会返回给前端统一的数据格式,一般包括code,msg,data信息。
创建返回统一实体类

package com.example.exceptionspring.domain;

import lombok.Data;

@Data
public class Result {
    private Integer code;
    private String msg;
    public Object data;

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

    public Result(ErrorEnum error) {
        this.code=error.getCode();
        this.msg=error.getMsg();
    }

    public Result() {
    }
}

创建枚举类,定义code和msg信息

package com.example.exceptionspring.domain;

public enum ErrorEnum {
    SUCCESS(200,"操作成功"),
    NOT_AUTH(401,"没有权限"),
    NOT_FOUND(404,"找不到资源"),
    ERROR(500,"系统错误");

    private Integer code;
    public String msg;

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

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

返回测试
在这里插入图片描述

全局异常处理

Exception异常在开发中难免会碰到,使用之前的处理方法try{}catch{}会造成大量的代码重复,每个接口都需要try{}catch{},代码会变得臃肿,SpringBoot为解决这一问题,推出了全局异常处理,通过注解@RestControllerAdvice@ExceptionHandler很好的进行控制。
本篇文章通过在Controller层和Service层演示异常的处理方式。
Controller层演示模拟java经典异常int i=i/0;不使用数据库模拟异常

  • 1.新建一个SpringBoot项目,创建项目的目录结构
    在这里插入图片描述
  • 2.新建全局异常处理类GlobalException.java
package com.example.exceptionspring.exception;


import com.example.exceptionspring.domain.ErrorEnum;
import com.example.exceptionspring.domain.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class GlobalException {

    @ExceptionHandler(value = Exception.class)
    public Result handleException(Exception e){
        return new Result(ErrorEnum.ERROR);
    }
}

@RestControllerAdvice注解是@ResponseBody+@ControllerAdvice注解,如果在该类使用注解,则方法上不需要添加@ResponseBody ,如果在类上使用@ControllerAdvice注解,则需在方法上添加@ResponseBody注解。
@ExceptionHandler value属性值为具体的异常类型,Exception.class为最顶级异常,所有的异常都继承Exception.class。

  • 3.编写测试接口模拟异常
package com.example.exceptionspring.controller;

import com.example.exceptionspring.domain.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class StudentController {

    @GetMapping("/getException")
    public Result getException(){
        int i=1/0;
        return new Result();
    }
}

Service层演示通过MySQL数据库模拟异常

    1. 配置数据库连接参数
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: 123456
  • 2.编写方法和sql
    @GetMapping("/getException1")
    public Result getException1(String username){
        studentService.getByName(username);
        return new Result(ErrorEnum.SUCCESS);
    }
    @Override
    public Map<String, Object> getByName(String username) {
        Map<String, Object> user = dao.getByName(username);
        if(user==null){
            throw new ServiceException(ErrorEnum.ERROR.getCode(),"用户不存在");
        }
        return user;
    }
@Mapper
public interface StudentDao {

    @Select("select * from user where username=#{username}")
    Map<String,Object> getByName(String username);
}
  • 3.创建业务异常类,并注册到全局异常处理方法中
package com.example.exceptionspring.exception;

import lombok.Data;

@Data
public class ServiceException extends RuntimeException{
    private Integer code;
    private String msg;

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

GlobalException类中新建handleServiceException方法

    @ExceptionHandler(value = ServiceException.class)
    public Result handleServiceException(ServiceException e){
        return new Result(ErrorEnum.ERROR.getCode(),e.getMsg());
    }
  • 4.测试
    在这里插入图片描述

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

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

相关文章

基于微信小程序的校园二手交易平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言学生的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W…

别问怎么下载,金蝶云星空SaaS BI系统不用下载

国产自研的奥威软件-金蝶云星空SaaS BI&#xff0c;不下载不安装&#xff0c;从浏览器上一键注册登录即可使用&#xff1a;一键点击下载金蝶云星空方案&#xff0c;执行后&#xff0c;BI系统将基于金蝶云星空内的数据与方案自带的BI报表&#xff0c;智能计算分析指标&#xff0…

python模拟斐波那契数列输出

用户输入指定的数列范围&#xff0c;正确输出结果。 源代码&#xff1a; def fiebo(n): a 1 b 1 for i in range(n): if i 0: print(a, end" ") elif i 1: print(b, end" ") else: …

yolov8模型训练遇到的问题

训练时有一种报错&#xff1a;no labels found in xxx.cache 首先要确定我们的图像&#xff0c;标签文件夹内容无误。检查完后如果还不行&#xff0c;就看看训练用到的东西&#xff0c;比如dataset.py&#xff0c;部分代码如下&#xff1a; def get_labels(self):""…

中国社科院大学-美国杜兰大学金融管理硕士暨能源管理硕士项目2023年毕业典礼

中国社科院大学-美国杜兰大学金融管理硕士暨能源管理硕士项目2023年毕业典礼 2023年9月16日&#xff0c;中国社会科学院大学-美国杜兰大学金融管理硕士项目暨能源管理硕士项目2023年毕业典礼在我校望京校区成功举办。 张波副校长致辞 中国社会科学院大学副校长张波教授、杜兰大…

求职应聘找工作的同学,在线测评怎么过?

信息时代&#xff0c;越来越多的公司在招聘时引入了人才测评机制。企业和单位希望通过人才测评在广大的应聘者中&#xff0c;找到符合自己要求的人才。虽然很多应聘者能力和简历都比较出众&#xff0c;但却在最开始的人才测评中吃了亏。有的公司很看重人才测评结果。测评就相当…

多模态大模型微调记录

VisualGLMhttps://github.com/THUDM/VisualGLM-6Bhttps://github.com/THUDM/VisualGLM-6B 清华大学开源的多模态大模型&#xff0c;具有62亿参数的中英双语言模型 基本思路&#xff1a; 1 通过中间模块&#xff08;Qformer&#xff09;构建起预训练视觉和语言的桥梁 2 中英…

C++文件交互实践:职工管理系统

管理系统需求 实现一个基于多态的职工管理系统 创建管理类 管理类负责内容&#xff1a; 与用户的沟通菜单界面对职工增删改查的操作与文件的读写交互 文件交互 -- 写文件 void workerManger::save() {ofstream ofs;ofs.open(FILENAME, ios::out);for (int i 0; i < th…

TP-LINK设备在防视频监控EasyCVR平台上无法使用语音对讲功能该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

前后台分离开发 YAPI平台 前端工程化之Vue-cli

目录 YAPI介绍前端工程化之Vue-cli前端工程化简介前端工程化入门——Vue-cli环境准备Vue项目简介创建Vue项目vue项目目录结构介绍vue项目运行方法 Vue项目开发流程 前后台混合开发这种开发模式有如下缺点&#xff1a; 沟通成本高&#xff1a;后台人员发现前端有问题&#xff0…

xss靶场练习level 1-10

level 1 1.搭建靶场后打开第一题 2.点击图片&#xff0c;页面跳转后提示“payload长度为&#xff1a;4”&#xff0c;观察url 存在传参 &#xff1f;nametest &#xff0c;且字符长度为4 3.查看网页源码&#xff0c;发现第一个点击图片跳转页面存在用户名提交&#xf…

wps及word通配匹配与正则匹配之异同

前言 今天在chatgpt上找找有什么比赛可以参加。下面是它给我的部分答案&#xff0c;我想将其制成文档裱起来&#xff0c;并突出比赛名方便日后查找。 这时理所当然地想到了查找替换功能&#xff0c;但是当我启用时却发现正则匹配居然没有了&#xff0c;现在只有通配匹配了。 …

c语言常见字符函数、内存函数(详讲)

前言&#xff1a; 其实在c语言当中是没有字符串这一概念的&#xff0c;不像c里面有string类型用来存放字符串。在c语言中我们只能把字符串放在字符串常量以及字符数组中。 1.常见字符串函数 1.1strlen size_t strlen ( const char * str );作用&#xff1a;用来求字符串中 …

MySQL之表的增删查改(1)

目录 一、插入数据 1、单行数据 全列插入 2、多行数据 指定列插入 3、插入否则更新 4、替换 二、读取 1、select列 2、where条件 3、结果排序 4、筛选分页结果 一、插入数据 首先创建一张表 mysql> CREATE TABLE students(-> id int unsigned primary key auto_incre…

背靠背 HVDC-MMC模块化多电平转换器输电系统-用于无源网络系统的电能质量调节MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; MATLAB2021版本 模型简介&#xff1a; MMC-HVDC模拟背靠背HVDC模块化多电平换流器&#xff08;MMC&#xff09;作为为整个电网供电的电能质量调节系统。因此&#xff0c;模块化多电平逆变器作为远程端转换器…

PyTorch 深度学习之用PyTorch实现线性回归Linear Regression with PyTorch(四)

0. Revision 1. PyTorch Fashion 2 Prepare dataset 广播机制 loss 3 Design model 文档 callable 4 Construct Loss and Optimizer 5 Training Cycle 总结 Test model

知识图谱:知识融合

知识融合简介 知识融合&#xff0c;即合并两个知识图谱(本体)&#xff0c;基本的问题都是研究怎样将来自多个来源的关于同一个实体或概念的描述信息融合起来。需要确认的是&#xff1a;等价实例、等价类/子类、等价属性/子属性。 一个例子如上图所示&#xff0c;图中不同颜色的…

【unity2023打包安卓工程】踩坑记录

这里写自定义目录标题 踩坑记录使用环境Unity的准备工作Windows10 SDKAndroidstudio第一个需要注意的地方第二个需要注意的地方第三个需要注意的地方第四个需要注意的地方第五个需要注意的地方 踩坑记录 踩了快一个星期的坑&#xff0c;希望能帮助到有需要的人 项目使用的是uni…

WorkPlus私有化部署IM即时通讯平台,构建高效安全的局域网办公环境

随着数字化转型的加速&#xff0c;政府机构与企业对高效、安全的即时通讯和协作工具的需求日益增长。企业微信和钉钉作为当前市场上较为常见的通讯工具&#xff0c;虽然在一定程度上满足了企业内部协作的需求&#xff0c;但仍存在一些问题&#xff0c;如数据安全性、私有化部署…

OpenCV实现图像的礼帽和黑帽

礼帽运算 黑帽运算 参数 cv.morphologyEx(img,op,kernel)参数&#xff1a; img : 要处理的图像op: 处理方式 代码实现 import numpy as np import cv2 as cv import matplotlib.pyplot as plt from pylab import mplmpl.rcParams[font.sans-serif] [SimHei]#读取图像img1 …