springBoot之自定义异常,返回对象

本文介绍了一种自定义异常类MyException及其在Spring MVC控制器中的应用,通过UserController类展示了如何使用自定义异常来处理业务逻辑错误,并返回带有错误信息的响应对象MyResponse。此外,还介绍了MyResponse类的实现,用于统一API接口的响应格式。

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

package com.huangliang.test.core;

public class MyException extends RuntimeException {
    private String errorCode;
    private String msg;

    public MyException(String message) {
        super(message);
    }

    public MyException(String errorCode, String msg) {
        this.errorCode = errorCode;
        this.msg = msg;
    }

    public String getErrorCode() {
        return errorCode;
    }

    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }

    public String getMsg() {
        return msg;
    }

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

 

 

package com.huangliang.test.core;

public class MyResponse<T> {
    private String code;
    private String msg;
    private String error;
    private T data;

    public MyResponse(T data) {
        this.code = "200";
        this.msg = "获取成功";
        this.error = "";
        this.data = data;
    }

    public MyResponse(String code, String msg, String error, T data) {
        this.code = code;
        this.msg = msg;
        this.error = error;
        this.data = data;
    }

    public String getCode() {
        return code;
    }

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

    public String getMsg() {
        return msg;
    }

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

    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }


}

 

 

package com.huangliang.test.modules.user.controller;

import com.huangliang.test.core.MyException;
import com.huangliang.test.core.MyResponse;
import com.huangliang.test.modules.user.domain.User;
import com.huangliang.test.modules.user.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class UserController {
    @Autowired
    private UserService userService;


    @RequestMapping(name = "/user/list", method = RequestMethod.GET)
    @ResponseBody
    public MyResponse getUserList() {
        List<User> list = userService.getUserList();
        if (list == null) {
            throw new MyException("获取对象为空");
        }
        return new MyResponse(list);
    }
}

 

 

 

返回数据:

{
    "code": "200",
    "msg": "获取成功",
    "error": "",
    "data": [
        {
            "id": 1,
            "name": "sam",
            "phone": "15928005689",
            "age": 22
        },
        {
            "id": 2,
            "name": "summer",
            "phone": "18302895614",
            "age": 25
        },
        {
            "id": 3,
            "name": "wang",
            "phone": "18756894422",
            "age": 24
        }
    ]
}

 

### 实现自定义异常处理 在 Spring Boot 项目中,为了更好地管理和响应应用程序中的各种异常情况,可以通过创建一个被 `@ControllerAdvice` 注解标记的类来实现全局异常捕获机制[^1]。 此类不仅能够统一管理不同控制器抛出的各种未预期状况,而且支持跨多个控制层共享相同的异常处理器逻辑。下面是一个简单的例子展示如何构建这样的组件: #### 创建自定义异常类 首先定义一些特定业务场景下的异常类型,以便更精确地区分不同的错误情形并给予相应的反馈信息。 ```java public class ResourceNotFoundException extends RuntimeException { public ResourceNotFoundException(String message) { super(message); } } ``` #### 构建全局异常处理器 接着编写带有 `@ControllerAdvice` 和 `@ExceptionHandler` 方法注解的 Java 类用于集中处理这些预定义好的异常对象以及其他任何未经预料的情况。 ```java @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity<?> handleResourceNotFound(ResourceNotFoundException ex){ Map<String, Object> body = new HashMap<>(); body.put("message", "资源不存在:" + ex.getMessage()); return new ResponseEntity<>(body, HttpStatus.NOT_FOUND); } @ExceptionHandler(Exception.class) public ResponseEntity<?> handleError(HttpServletRequest req, Exception ex){ Map<String, Object> body = new LinkedHashMap<>(); body.put("path", req.getServletPath()); body.put("message", ex.getMessage()); return new ResponseEntity<>(body, HttpStatus.INTERNAL_SERVER_ERROR); } } ``` 上述代码片段展示了两个具体的异常处理函数:一个是专门针对 `ResourceNotFoundException` 这种已知类型的;另一个则是作为兜底措施,适用于所有其他未知类型的异常实例。每当发生对应类型的异常时,Spring 将会调用相应的方法返回给前端用户友好的提示消息以及HTTP状态码[^2]。 此外,如果希望进一步增强默认情况下提供的错误详情页面或JSON响应体的内容,则可以考虑扩展 `DefaultErrorAttributes` 抽象基类来自定义额外的信息字段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值