SpringBoot Response统一返回封装,全局异常处理

梦幻独角兽 2024-02-29 ⋅ 24 阅读

引言

在开发项目过程中,我们经常需要根据业务需求返回统一的响应格式给前端,同时需要对异常进行处理并返回友好的错误信息。Spring Boot提供了一种简洁的方式来实现这一需求。

统一响应格式封装

数据模型设计

我们首先需要定义一个统一的响应格式,通常包括响应状态码、提示信息、以及返回数据。下面是一个示例:

public class ApiResponse<T> {
    private int code;
    private String message;
    private T data;
    // 省略getter和setter方法
}

统一封装方法

为了方便使用,我们可以定义一个工具类来进行统一的结果封装。下面是一个示例:

public class ResponseUtil {
    public static <T> ApiResponse<T> success(T data) {
        ApiResponse<T> response = new ApiResponse<>();
        response.setCode(200);
        response.setMessage("Success");
        response.setData(data);
        return response;
    }

    public static <T> ApiResponse<T> error(int code, String message) {
        ApiResponse<T> response = new ApiResponse<>();
        response.setCode(code);
        response.setMessage(message);
        return response;
    }

    // 其他封装方法
}

使用示例

在控制器中,我们可以使用ResponseUtil来进行统一的结果封装。

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

    @GetMapping("/users/{id}")
    public ApiResponse<User> getUser(@PathVariable("id") Long id) {
        User user = userService.getUser(id);
        return ResponseUtil.success(user);
    }

    // 其他接口
}

全局异常处理

异常处理器定义

通常情况下,我们希望将异常处理的逻辑放在一个统一的地方,方便管理和维护。可以定义一个全局异常处理器来捕获并处理所有的异常。下面是一个示例:

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public ApiResponse<Void> handleException(Exception e) {
        // 可根据异常类型进行相应处理
        if (e instanceof BusinessException) {
            BusinessException businessException = (BusinessException) e;
            return ResponseUtil.error(businessException.getCode(), businessException.getMessage());
        } else {
            return ResponseUtil.error(500, "Internal Server Error");
        }
    }
}

自定义异常

除了处理Java内置异常外,我们有时也会遇到一些自定义的业务异常。这时,我们可以定义一个自定义异常类,并在异常处理器中根据异常类型进行处理。下面是一个示例:

public class BusinessException extends RuntimeException {
    private int code;

    public BusinessException(int code, String message) {
        super(message);
        this.code = code;
    }

    public int getCode() {
        return code;
    }
}

使用示例

在业务逻辑出现异常时,我们可以抛出自定义异常,并在全局异常处理器中进行处理。

@Service
public class UserService {
    public User getUser(Long id) {
        User user = userRepository.findById(id);
        if (user == null) {
            throw new BusinessException(404, "User not found");
        }
        return user;
    }

    // 其他方法
}

总结

本文介绍了在Spring Boot项目中如何实现统一的响应格式封装和全局异常处理。通过统一的响应格式,我们可以减少代码重复,提高开发效率。而全局异常处理能够及时处理异常并返回友好的错误信息给前端,提升用户体验。希望本文对你的开发工作有所帮助。


全部评论: 0

    我有话说: