在实际开发过程中,我们经常需要处理各种不同的业务逻辑,并返回统一格式的响应数据给前端。同时,为了提高代码的可维护性和用户体验,全局异常处理也是非常重要的。
统一返回结果封装
import lombok.Data;
@Data
public class Response <T>{
private int code;
private String message;
private T data;
private Response(int code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
public static <T> Response<T> success(T data) {
return new Response<>(200, "成功!", data);
}
public static <T> Response<T> failure(int code, String message) {
return new Response<>(code, message, null);
}
}
使用ControllerAdvice进行全局异常处理
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public Response<Object> handleException(Exception e) {
// 日志记录异常信息
return Response.failure(500, "内部服务器错误: " + e.getMessage());
}
}
自定义异常
public class BusinessException extends RuntimeException {
private int code;
public BusinessException(int code, String message) {
super(message);
this.code = code;
}
public int getCode() {
return code;
}
}
在全局异常处理器中添加对自定义异常的处理。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public Response<Object> handleException(Exception e) {
return Response.failure(500, "内部服务器错误: " + e.getMessage());
}
@ExceptionHandler(BusinessException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Response<Object> handleBusinessException(BusinessException e) {
return Response.failure(e.getCode(), e.getMessage());
}
}
测试:
@RestController
public class TestController {
@GetMapping("/success")
public Response<User> getSuccess() {
User user = new User("张三", 30);
return Response.success(user);
}
@GetMapping("/failure")
public Response<Object> getFailure() {
throw new BusinessException(400, "错误请求");
}
}
对您有帮助的话辛苦您关注一下微信公众号哦!谢谢
清宁时光秀