記錄

yuxin!!發表於2024-06-20

高效精準記錄做專案中遇到的Bug與一些設計方案

BUG:複製資料pom,匯入依賴爆紅

<depedencyManagent>
    <dependencies>
        ...
    </dependencies>
</depedencyManagent>

現象:在建立父專案時,複製pom檔案如上,重新整理後爆紅,發現並沒有引入依賴

原因:dependencyManegent是一個邏輯上的規範,主要用於統一管理依賴版本,並不會真正匯入依賴,因此才會出現部分依賴爆紅

解決方法:

  • 當後續子專案中真正引入依賴時,可以不顯示的宣告依賴版本號;系統會自動向上尋找有dependencyManegent的pom檔案,此時才會正式引入依賴解決爆紅。
  • 當然也可以直接在父專案中將所有依賴引入,先去掉dependencyManegent,重新整理Maven,此時會將所有依賴引入,再補上dependencyManegent就好了。

專案如何統一時間格式

  1. 在相應的類的屬性上使用@JsonFormat註解
  2. 在application.yml中指定spring.jackson.date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8

專案如何統一結果返回

  1. 定義返回標準格式,需要包含:

    1. code:狀態值,統一返回結果狀態碼
    2. data:需要返回的資料
    3. message:結果描述
    4. timestamp:介面呼叫時間
  2. 統一狀態碼

    1. 使用HpptClient中的狀態碼

    2. 使用自定義狀態碼列舉類ReturnCodeEnum

      @Getter
      public enum ReturnCodeEnum {
          
          RC200("200","success"),
          ;
          
          /**自定義狀態碼**/
          private final String code;
          /**自定義描述**/
          private final String message;
      
          ReturnCodeEnum(String code, String message) {
              this.code = code;
              this.message = message;
          }
          
      }
      
  3. 統一結果返回物件

    @Data
    @Accessors(chain = true)
    public class ResultData<T> {
    
        private String code;
        private String message;
        private T data;
        private long timestamp;
    
        public ResultData() {
            this.timestamp = System.currentTimeMillis();
        }
    
        public static <T> ResultData<T> success(T data) {
            ResultData<T> resultData = new ResultData<>();
            resultData.setCode(ReturnCodeEnum.RC200.getCode());
            resultData.setMessage(ReturnCodeEnum.RC200.getMessage());
            resultData.setData(data);
    
            return resultData;
        }
        public static <T> ResultData<T> fail(String code, String message) {
            ResultData<T> resultData = new ResultData<>();
            resultData.setCode(code);
            resultData.setMessage(message);
    
            return resultData;
        }
    }
    

專案如何統一異常處理

統一異常處理器

@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

    @ExceptionHandler(RuntimeException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public ResultData<String> exception(Exception e) {
        log.error("全域性異常資訊:{}", e.getMessage(), e);
        return ResultData.fail(ReturnCodeEnum.RC500.getCode(), e.getMessage());

    }

}

最近一次更新時間---2024/6/20