springboot项目设置统一返回结果及全局异常处理,基于springboot构建的web项目
统一返回结果
使用ResponseBodyAdvice
统一返回结果类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DefaultResponse<T>{
public static final int OK_CODE = 200000;
public static final int FAILED_CODE = 400000;
private T data;
private boolean success;
private int errorCode;
private String msg;
public static DefaultResponse<String> FailedResponse(String msg){
return new DefaultResponse("服务异常" , false , FAILED_CODE , msg);
}
}
编写自定义ResponseBodyAdvice
@Slf4j
@RestControllerAdvice(annotations = RestController.class)
public class SelfResponseAdvice 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) {
DefaultResponse defaultResponse = new DefaultResponse();
defaultResponse.setData(o);
defaultResponse.setErrorCode(DefaultResponse.OK_CODE);
defaultResponse.setSuccess(true);
defaultResponse.setMsg("OK");
log.info("通过ResponseBodyAdvice---------------");
return defaultResponse;
}
}
测试返回结果
全局异常处理
自定义ExceptionHandler
/**
* @author meng
* @Description 全局异常处理器
* @Date 2022/8/15
* @RestControllerAdvice,RestController的增强类,可用于实现全局异常处理器
* @ExceptionHandler,统一处理某一类异常,从而减少代码重复率和复杂度,比如要
* 获取自定义异常可以 @ExceptionHandler(BusinessException.class)
* @ResponseStatus指定客户端收到的http状态码
*/
@RestControllerAdvice
public class SelfExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public DefaultResponse exception(Exception e){
return DefaultResponse.FailedResponse(e.getMessage());
}
}
异常结果