<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      rest-spring-boot-starter

      rest-spring-boot-starter

      基于spring boot,統一業務異常處理,統一返回格式包裝

      依賴

      <dependency>
          <groupId>tk.fishfish</groupId>
          <artifactId>rest-spring-boot-starter</artifactId>
          <version>1.0.0.RELEASE</version>
      </dependency>
      

      統一業務異常處理

      @RestController
      public class DemoController {
      
          @GetMapping("/list")
          public List<String> list() {
              throw new BizException(10001, "xxx錯誤");
          }
      
      }
      

      業務異常統一處理:

      {
          "code": 10001,
          "msg": "xxx錯誤",
          "data": null
      }
      

      統一返回格式包裝

      @RestController
      public class DemoController {
      
          @GetMapping("/list")
          public List<String> list() {
              return Arrays.asList("1", "2");
          }
      
      }
      

      返回值進行包裝,忽略org.springframework.http.ResponseEntity值類型。

      {
          "code": 0,
          "msg": null,
          "data": [
              "1",
              "2"
          ]
      }
      

      原理

      定義統一格式:

      {
          "code": 返回碼,
          "msg": 描述,
          "data": 數據
      }
      

      約定:

      • code:-1,代表全局異常處理的錯誤;0,成功;正數,業務錯誤碼
      • msg:一段描述
      • data:真正的數據

      異常處理

      使用org.springframework.web.bind.annotation.RestControllerAdvice,全局捕獲異常。

      package tk.fishfish.rest;
      
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      import org.springframework.core.annotation.Order;
      import org.springframework.web.bind.annotation.ExceptionHandler;
      import org.springframework.web.bind.annotation.RestControllerAdvice;
      
      /**
       * 全局異常處理,優先級為100
       *
       * @author 奔波兒灞
       * @since 1.0
       */
      @Order(100)
      @RestControllerAdvice
      public class GlobalExceptionHandler {
      
          private static final Logger LOG = LoggerFactory.getLogger(GlobalExceptionHandler.class);
      
          @ExceptionHandler(BizException.class)
          public ApiResult<Void> handleBizException(BizException e) {
              LOG.warn("handle bizException", e);
              Integer code = e.getCode();
              String msg = e.getMessage();
              return ApiResult.fail(code, msg);
          }
      
          @ExceptionHandler(Exception.class)
          public ApiResult<Void> handleException(Exception e) {
              LOG.warn("handle exception", e);
              String msg = e.getMessage();
              return ApiResult.fail(-1, msg);
          }
      
      }
      

      統一返回

      通過實現org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice,在寫入響應前統一包裝返回內容。

      package tk.fishfish.rest;
      
      import org.springframework.core.MethodParameter;
      import org.springframework.http.MediaType;
      import org.springframework.http.ResponseEntity;
      import org.springframework.http.converter.HttpMessageConverter;
      import org.springframework.http.server.ServerHttpRequest;
      import org.springframework.http.server.ServerHttpResponse;
      import org.springframework.web.bind.annotation.RestController;
      import org.springframework.web.bind.annotation.RestControllerAdvice;
      import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
      
      /**
       * 返回body處理,包裝成ApiResult。如果是ResponseEntity,則不包裝
       *
       * @author 奔波兒灞
       * @see tk.fishfish.rest.ApiResult
       * @since 1.0
       */
      @RestControllerAdvice(annotations = RestController.class)
      public class ApiResultResponseBodyAdvice implements ResponseBodyAdvice<Object> {
      
          @Override
          public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
              return true;
          }
      
          @Override
          public Object beforeBodyWrite(Object body, MethodParameter methodParameter,
                                        MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass,
                                        ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
              // ResponseEntity,則不包裝
              if (body instanceof ResponseEntity) {
                  return body;
              }
              // ApiResult,也不包裝
              if (body instanceof ApiResult) {
                  return body;
              }
              // todo 基本數據類型是否特殊處理
              // 其余統一包裝成ApiResult
              return ApiResult.ok(body);
          }
      
      }
      

      項目地址

      posted @ 2019-11-05 21:11  bener  閱讀(506)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产仑乱无码内谢| 少妇大叫太大太爽受不了| 精品熟女少妇免费久久| 亚洲国产无线乱码在线观看| 天天爽夜夜爱| 免费VA国产高清大片在线| 最近免费中文字幕mv在线视频3| 撕开奶罩揉吮奶头视频| 乱女乱妇熟女熟妇综合网| 在线视频一区二区三区色| 欧美18videosex性欧美tube1080| a级黑人大硬长爽猛出猛进| 国产视色精品亚洲一区二区| 精品中文字幕人妻一二| 天堂在线www天堂中文在线| 久99久热这里只有精品| 久久99久国产精品66| 丰满巨乳淫巨大爆乳| 亚洲av综合av一区| a级亚洲片精品久久久久久久| 天天摸天天做天天爽水多| 久久精品国产亚洲av成人| 少妇又爽又刺激视频| 国产精品二区中文字幕| 在线无码午夜福利高潮视频| 丝袜人妖av在线一区二区| 视频一区二区不中文字幕| 国自产拍偷拍精品啪啪一区二区| 亚洲国产日韩伦中文字幕| 国产精成人品日日拍夜夜| 九九电影网午夜理论片| 日韩精品18禁一区二区| 欧美喷潮最猛视频| 亚洲在战av极品无码| 慈溪市| 蜜臀av入口一区二区三区| 精品人妻人人做人人爽夜夜爽| 亚洲欧洲久久激情久av| 精品剧情V国产在线观看| 国产精品中文字幕一区| 一区二区三区四区五区自拍|