Spring Boot 捕捉全局异常 统一返回值

本文介绍了一种在前后端分离项目中实现统一响应处理的方法,包括定义状态码、消息和数据的枚举类与返回实体,以及如何在控制器和服务层应用这些组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在前后端分离的情况下,我们经常会定义一个统一的反回数据格式,通常都会包含状态码,返回信息,返回的数据,是否成功等参数。

1、ResultCode

  单独定义了一个ReturnCode枚举类用于存储代码和返回的Message

public enum ResultCode {
    //成功
    SUCCESS(200),
    // 失败
    FAIL(400),

    // 未认证(签名错误)
    UNAUTHORIZED(401),

    // 接口不存在
    NOT_FOUND(404),

    // 服务器内部错误
    INTERNAL_SERVER_ERROR(500);
    public int code;
    ResultCode(int code)
    {
        this.code=code;
    }
}

2、ResponseResult


/*
 统一返回信息
 */
public class ResponseResult<T> {
    public int code; //返回状态码200成功

    private String msg; //返回描述信息

    private T data; //返回内容体

    public ResponseResult<T> setCode(ResultCode retCode) {
        this.code = retCode.code;
        return this;
    }

    public int getCode() {
        return code;
    }

    public ResponseResult<T> setCode(int code) {
        this.code = code;
        return this;
    }

    public String getMsg() {
        return msg;
    }

    public ResponseResult<T> setMsg(String msg) {
        this.msg = msg;
        return this;
    }

    public T getData() {
        return data;
    }

    public ResponseResult<T> setData(T data) {
        this.data = data;
        return this;
    }

}

在定义一个统一返回类:

3、Response

public class Response {
    private final static String SUCCESS = "success";

    private final static String FAIL = "fail";

    public static <T> ResponseResult<T> makeOKRsp() {
        return new ResponseResult<T>().setCode(ResultCode.SUCCESS).setMsg(SUCCESS);
    }

    public static <T> ResponseResult<T> makeOKRsp(String message) {
        return new ResponseResult<T>().setCode(ResultCode.SUCCESS).setMsg(message);
    }

    public static <T> ResponseResult<T> makeOKRsp(T data) {
        return new ResponseResult<T>().setCode(ResultCode.SUCCESS).setMsg(SUCCESS).setData(data);
    }

    public static <T> ResponseResult<T> makeErrRsp(String message) {
        return new ResponseResult<T>().setCode(ResultCode.INTERNAL_SERVER_ERROR).setMsg(message);
    }

    public static <T> ResponseResult<T> makeRsp(int code, String msg) {
        return new ResponseResult<T>().setCode(code).setMsg(msg);
    }

    public static <T> ResponseResult<T> makeRsp(int code, String msg, T data) {
        return new ResponseResult<T>().setCode(code).setMsg(msg).setData(data);
    }
}

4、新建 IUserService

新建测试用户接口类

package com.example.demo.service;
import com.example.demo.entity.User;
public interface IUserService {
    public User getUserInfo();
}

5、新建 UserServiceImpl

新建测试用户信息服务类

package com.example.demo.service.impl;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.stereotype.Service;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.SimpleFormatter;

@Service
public class UserServiceImpl implements IUserService {
    public User getUserInfo(){
        User user = new User();
        user.setName("jack");
        user.setPassword(12341234);

        return user;
    }

}

6、在controller调用

 @Autowired
    UserService service;
    @RequestMapping(value = "/getUserItem",method = RequestMethod.GET)
    public ResponseResult<User> getUserItem(){
        try {
            User user = service.getUserInfo();
            String[] arr= new String[]{"测试"};
            return  Response.makeOKRsp(user);
        }catch (Exception e)
        {
            return  Response.makeErrRsp("查询用户信息异常");
        }
    }

返回结果:

7、全局异常处理器 

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

    /*============= 请求错误 start ==============================================*/

    /**
     * HTTP 请求方式不支持异常
     * HttpRequestMethodNotSupportedException
     * @return {@link ResponseResult}
     */
    @ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
    public ResponseResult httpRequestMethodNotSupportException(HttpRequestMethodNotSupportedException e, HttpServletRequest request) {
        return Response.makeErrRsp("请求方式不支持异常");
    }

    /*============= 请求错误 end ==============================================*/

}

 修改一下getUserItem让其抛出自定义查询返回null的异常:

 

源码:https://github.com/LeeCurtain/demo.git 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值