百度网站大全,帝国网站管理系统视频教程,wordpress聊天,培训网站平台如何推广统一返回结果
定义统一返回结果类ResultResponse定义新注解ResponseResult来标记需要拦截的方法或类添加RestControllerAdvice注解#xff0c;实现ResponseBodyAdvice接口#xff0c;重写support, beforeBodyWrite方法
统一结果类ResultResponse
Setter
Getter
public cla…统一返回结果
定义统一返回结果类ResultResponse定义新注解ResponseResult来标记需要拦截的方法或类添加RestControllerAdvice注解实现ResponseBodyAdvice接口重写support, beforeBodyWrite方法
统一结果类ResultResponse
Setter
Getter
public class ResultResponseT {/*** 响应代码*/private String code;/*** 响应消息*/private String message;/*** 响应结果*/private T result;public ResultResponse() {}public ResultResponse(BaseErrorInfoInterface errorInfo) {this.code errorInfo.getResultCode();this.message errorInfo.getResultMsg();}/*** 成功*/public static T ResultResponseT success() {return success(null);}/*** 成功*/public static T ResultResponseT success(T data) {ResultResponseT rb new ResultResponse();rb.setCode(ExceptionEnum.SUCCESS.getResultCode());rb.setMessage(ExceptionEnum.SUCCESS.getResultMsg());rb.setResult(data);return rb;}/*** 失败*/public static T ResultResponseT error(BaseErrorInfoInterface errorInfo) {ResultResponseT rb new ResultResponse();rb.setCode(errorInfo.getResultCode());rb.setMessage(errorInfo.getResultMsg());rb.setResult(null);return rb;}/*** 失败*/public static T ResultResponseT error(String code, String message) {ResultResponseT rb new ResultResponse();rb.setCode(code);rb.setMessage(message);rb.setResult(null);return rb;}/*** 失败*/public static T ResultResponseT error(String message) {ResultResponseT rb new ResultResponse();rb.setCode(-1);rb.setMessage(message);rb.setResult(null);return rb;}Overridepublic String toString() {return JSONObject.toJSONString(this);}}定义新注解ResponseResult
Retention(RetentionPolicy.RUNTIME)
Target({ElementType.METHOD, ElementType.TYPE})
Documented
public interface ResponseResult {
}ResponseResultBodyAdvice类
support方法判断支持的类型beforeBodyWrite方法对controller的结果进行构造即构造成json格式RestControllerAdvice注解ResponseBodyControllerAdvice
RestControllerAdvice
Slf4j
public class ResponseResultBodyAdvice implements ResponseBodyAdviceObject {Resourceprivate ObjectMapper objectMapper;private static final Class? extends Annotation ANNOTATION_TYPE ResponseResult.class;Overridepublic boolean supports(MethodParameter returnType, Class? extends HttpMessageConverter? converterType) {return AnnotatedElementUtils.hasAnnotation(returnType.getContainingClass(), ANNOTATION_TYPE) || returnType.hasMethodAnnotation(ANNOTATION_TYPE);}SneakyThrowsOverridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class? extends HttpMessageConverter? selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {// 如果返回类型是string那么springmvc是直接返回的此时需要手动转化为jsonClass? returnClass returnType.getMethod().getReturnType();if (body instanceof String || Objects.equals(returnClass, String.class)) {return objectMapper.writeValueAsString(ResultResponse.success(body));}// 防止重复包裹的问题出现if (body instanceof ResultResponse) {return body;}return ResultResponse.success(body);}
}统一捕获异常
ExceptionHandler(value BizException.class) 捕获自定义异常
ControllerAdvice
public class GlobalExceptionHandler {private static final Logger logger LoggerFactory.getLogger(GlobalExceptionHandler.class);/*** 处理自定义的业务异常** param req* param e* return*/ExceptionHandler(value BizException.class)ResponseBodypublic ResultResponseVoid bizExceptionHandler(HttpServletRequest req, BizException e) {logger.error(发生业务异常原因是{}, e.getErrorMsg());return ResultResponse.error(e.getErrorCode(), e.getErrorMsg());}/*** 处理空指针的异常** param req* param e* return*/ExceptionHandler(value NullPointerException.class)ResponseBodypublic ResultResponseVoid exceptionHandler(HttpServletRequest req, NullPointerException e) {logger.error(发生空指针异常原因是:, e);return ResultResponse.error(ExceptionEnum.BODY_NOT_MATCH);}/*** 处理其他异常** param req* param e* return*/ExceptionHandler(value Exception.class)ResponseBodypublic ResultResponseVoid exceptionHandler(HttpServletRequest req, Exception e) {logger.error(未知异常原因是:, e);return ResultResponse.error(ExceptionEnum.INTERNAL_SERVER_ERROR);}
}