springboot中怎么实现全局统一返回
时间: 2024-05-04 10:15:22 浏览: 10
在SpringBoot中,可以通过定义一个全局的异常处理器和返回值处理器来实现全局统一返回。
1. 全局异常处理器
在SpringBoot中,可以通过实现`@ControllerAdvice`注解的类来定义一个全局的异常处理器。这个类中的方法可以捕获所有Controller中抛出的异常,并进行统一处理。
示例代码:
```java
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public ResultVO handleException(Exception e) {
ResultVO resultVO = new ResultVO();
resultVO.setCode(ResultEnum.ERROR.getCode());
resultVO.setMsg(e.getMessage());
return resultVO;
}
}
```
在上面的例子中,我们定义了一个`GlobalExceptionHandler`类,并使用`@ControllerAdvice`注解标记它是一个全局异常处理器。在这个类中,我们定义了一个`handleException`方法,它使用`@ExceptionHandler`注解标记它可以处理所有类型的异常。在方法中,我们可以根据异常类型进行不同的处理,并返回一个统一的`ResultVO`对象。
2. 全局返回值处理器
在SpringBoot中,可以通过实现`ResponseBodyAdvice`接口来定义一个全局的返回值处理器。这个类中的方法可以对Controller返回的结果进行统一处理。
示例代码:
```java
@ControllerAdvice
public class GlobalResponseHandler implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
return true;
}
@Override
public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
ResultVO resultVO = new ResultVO();
resultVO.setCode(ResultEnum.SUCCESS.getCode());
resultVO.setMsg(ResultEnum.SUCCESS.getMsg());
resultVO.setData(o);
return resultVO;
}
}
```
在上面的例子中,我们定义了一个`GlobalResponseHandler`类,并实现了`ResponseBodyAdvice`接口。在类中,我们实现了`supports`和`beforeBodyWrite`方法。`supports`方法返回`true`表示这个处理器可以处理所有类型的返回值。`beforeBodyWrite`方法对Controller返回的结果进行统一处理,将返回值包装成一个统一的`ResultVO`对象。
通过定义全局异常处理器和返回值处理器可以实现全局统一返回,统一格式的返回值可以方便前端调用和处理。