SpringBoot 自定义异常处理输出

在Spring Boot中自定义异常处理主要包括两部分:定义自定义异常和创建全局异常处理器。以下是一个详细的示例,包括自定义异常类、全局异常处理器以及如何在控制器中使用它们。

1. 定义自定义异常类

首先,你需要创建一个自定义异常类,这通常包含一个错误代码和错误消息。这里我们创建一个UserNotFoundException异常类:

public class UserNotFoundException extends RuntimeException {
    private static final long serialVersionUID = 1L;
    private final int errorCode;

    public UserNotFoundException(int errorCode, String message) {
        super(message);
        this.errorCode = errorCode;
    }

    public int getErrorCode() {
        return errorCode;
    }
}

2. 创建全局异常处理器

接下来,你需要创建一个全局异常处理器,这通常通过使用@ControllerAdvice注解来完成。在这个处理器中,你可以定义多个方法,每个方法使用@ExceptionHandler注解来处理不同类型的异常。

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = UserNotFoundException.class)
    public ResponseEntity<Object> handleUserNotFoundException(UserNotFoundException ex) {
        // 返回一个自定义的错误响应
        ErrorResponse errorResponse = new ErrorResponse(
                ex.getErrorCode(),
                "User Not Found",
                ex.getMessage()
        );
        return new ResponseEntity<>(errorResponse, HttpStatus.NOT_FOUND);
    }

    // 可以添加更多的异常处理器方法
}

3. 定义错误响应对象

为了返回一个更友好的错误响应,我们可以定义一个错误响应对象:

public class ErrorResponse {
    private int code;
    private String type;
    private String message;

    public ErrorResponse(int code, String type, String message) {
        this.code = code;
        this.type = type;
        this.message = message;
    }

    // Getter and Setter methods
}

4. 在控制器中使用自定义异常

现在你可以在控制器中抛出自定义异常:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @GetMapping("/user")
    public User getUser(@RequestParam("userId") int userId) {
        if (userId == 1) {
            // 假设用户ID为1的用户不存在
            throw new UserNotFoundException(404, "User with ID " + userId + " not found");
        }
        // 正常情况下的逻辑...
        return new User(); // 返回一个用户对象
    }
}

5. 测试

当你尝试访问/user并且传入一个导致异常的用户ID时,你应该能看到一个HTTP状态码为404的响应,以及一个包含错误信息的JSON响应体。

以上步骤展示了如何在Spring Boot中创建和使用自定义异常处理。你可以根据需要扩展GlobalExceptionHandler类来处理其他类型的异常,或者定义更多自定义异常类来覆盖不同的业务场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值