日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot项目中Controller层代码编写规范整理

發布時間:2025/3/12 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot项目中Controller层代码编写规范整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • Controller層代碼規范
    • SpringMVC接口定義要注意以下常見的幾種問題
      • 1. 返回格式不統一
      • 2. 沒有考慮失敗情況
      • 3. 出現和業務無關的輸入參數

Controller層代碼規范

主要的內容是就是接口定義里面的內容,你只要遵循里面的規范,controller就問題不大,除了這些,還有另外的幾點:

  • 所有函數返回統一的ResultBean/PageResultBean格式;
  • 沒有統一格式,AOP無法玩.
  • ResultBean/PageResultBean是controller專用的,不允許往后傳
  • Controller做參數格式的轉換,不允許把json,map這類對象傳到services去,也不允許services返回json、map。
  • SpringMVC接口定義要注意以下常見的幾種問題

    1. 返回格式不統一

    同一個接口,有時候返回數組,有時候返回單個;成功的時候返回對象,失敗的時候返回錯誤信息字符串。工作中有個系統集成就是這樣定義的接口,真是辣眼睛。這個對應代碼上,返回的類型是map,json,object,都是不應該的。實際工作中,我們會定義一個統一的格式,就是ResultBean,分頁的有另外一個PageResultBean
    錯誤范例:

    //返回map可讀性不好,盡量不要 @PostMapping("/delete") public Map<String, Object> delete(long id, String lang) { } // 成功返回boolean,失敗返回string,大忌 @PostMapping("/delete") public Objectdelete(long id, String lang) { try { boolean result = configService.delete(id, local); return result; } catch (Exception e) {log.error(e); return e.toString(); } }

    2. 沒有考慮失敗情況

    一開始只考慮成功場景,等后面測試發現有錯誤情況,怎么辦,改接口唄,前后臺都改,勞民傷財無用功。
    錯誤范例:

    //不返回任何數據,沒有考慮失敗場景,容易返工  @PostMapping("/update") public void update(long id, xxx) { }

    3. 出現和業務無關的輸入參數

    如lang語言,當前用戶信息 都不應該出現參數里面,應該從當前會話里面獲取。后面講ThreadLocal會說到怎么樣去掉。除了代碼可讀性不好問題外,尤其是參數出現當前用戶信息的,這是個嚴重問題。
    錯誤范例:

    // (當前用戶刪除數據)參數出現lang和userid,尤其是userid,大忌  @PostMapping("/delete") public Map<String, Object> delete(long id,String lang, String userId) { }
  • 出現復雜的輸入參數
    一般情況下,不允許出現例如json字符串這樣的參數,這種參數可讀性極差。應該定義對應的bean。(不絕對)

    錯誤范例:

  • // 參數出現json格式,可讀性不好,代碼也難看  @PostMapping("/update") public Map<String, Object> update(long id, String jsonStr) { }
  • 沒有返回應該返回的數據
    例如 口一般情況下應該返回新對象的id標識,這需要編程經驗。新手定義的時候因為前臺沒有用就不返回數據或者只返回true,這都是不恰當的。別人要不要是別人的事情,你該返回的還是應該返回。

    錯誤范例:

  • // 約定俗成,新建應該返回新對象的信息,只返回boolean容易導致返工  @PostMapping("/add") public boolean add(xxx) { //xxx return configService.add(); }

    很多人看了我的這篇文章程序員你為什么這么累?,都覺得里面的技術也很簡單,沒有什么特別的地方,但是,實現這個代碼框架之前,就是要你的接口的統一的格式ResultBean,aop才好做。有些人誤解了,我那篇文章說的都不是技術,重點說的是編碼習慣工作方式,如果你重點還是放在什么技術上,那我也幫不了你了。同樣,如果我后面的關于習慣和規范的帖子,你重點還是放在技術上的話,那是丟了西瓜撿芝麻,有很多貼還是沒有任何技術點呢。
    附上ResultBean,沒有任何技術含量:

    /*** Controller統一返回對象,響應信息主體*/ @Getter @ApiModel(value = "響應信息主體") public class R<T> implements Serializable {private static final long serialVersionUID = 1L;/*** 狀態碼:1成功,其他均為失敗【詳見錯誤狀態碼表】*/@ApiModelProperty(value = "狀態碼")private int code;/*** 成功為success,其他為失敗原因*/@ApiModelProperty(value = "消息")private Object message = "success";/*** 數據結果集*/@ApiModelProperty(value = "數據結果集")private T data;/*** 當前時間*/@ApiModelProperty(value = "時間戳")private final long time = System.currentTimeMillis();public R<T> setMessage(Object message) {this.message = message;return this;}public R<T> setMessage(String format, Object... args) {this.message = new Formatter().format(format, args).toString();return this;}public R() {}/*** 使用枚舉類中模版消息** @param resultConstant ResultConstant* @param data 數據結果集*/private R(ResultConstant resultConstant, T data) {this.code = resultConstant.getCode();this.message = resultConstant.getMessage();this.data = data;}public static <T> R<T> ok() {return restResult(ResultConstant.SUCCESS, null, null);}public static <T> R<T> ok(T data) {return restResult(ResultConstant.SUCCESS, null, data);}public static <T> R<T> ok(T data, Object message) {return restResult(ResultConstant.SUCCESS, message, data);}public static <T> R<T> failed(ResultConstant resultConstant) {return restResult(resultConstant, null, null);}public static <T> R<T> failed(ResultConstant resultConstant, Object message) {return restResult(resultConstant, message, null);}public static <T> R<T> failed(ResultConstant resultConstant, Object message, T data) {return restResult(resultConstant, message, data);}private static <T> R<T> restResult(ResultConstant resultConstant, Object message, T data) {R<T> apiResult = new R<>(resultConstant, data);if (null != message) {apiResult.setMessage(message);}return apiResult;} }

    統一的接口規范,能幫忙規避很多無用的返工修改和可能出現的問題。能使代碼可讀性更加好,利于進行aop和自動化測試這些額外工作。

    總結

    以上是生活随笔為你收集整理的SpringBoot项目中Controller层代码编写规范整理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。