欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot?vue測(cè)試列表遞歸查詢子節(jié)點(diǎn)下的接口功能實(shí)現(xiàn)

 更新時(shí)間:2022年05月26日 15:50:46   作者:把蘋(píng)果咬哭的測(cè)試筆記  
這篇文章主要為大家介紹了springboot?vue測(cè)試列表遞歸查詢子節(jié)點(diǎn)下的接口功能實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

基于 springboot+vue 的測(cè)試平臺(tái)開(kāi)發(fā)

繼續(xù)更新

模塊樹(shù)節(jié)點(diǎn)的開(kāi)發(fā)暫告一段落,現(xiàn)在開(kāi)發(fā)右邊接口相關(guān)的部分,今天先完成列表的功能。

功能是這樣,當(dāng)點(diǎn)擊樹(shù)的某個(gè)節(jié)點(diǎn)時(shí)候,右側(cè)列表展示這個(gè)節(jié)點(diǎn)下的所有接口,帶分頁(yè)(最終效果圖)。

需要注意的是,因?yàn)楣?jié)點(diǎn)下還有子節(jié)點(diǎn),所以列表的功能需要使用遞歸來(lái)查詢。

一、后端

1. 建表

想了一些字段,可能后續(xù)還會(huì)有些改動(dòng),暫時(shí)先這樣:

CREATE TABLE `api_definition` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
  `projectId` bigint NOT NULL COMMENT '所屬項(xiàng)目id',
  `name` varchar(255) NOT NULL COMMENT '接口名稱',
  `method` varchar(64) NOT NULL COMMENT '請(qǐng)求方法',
  `path` varchar(1000) DEFAULT NULL COMMENT '接口路徑',
  `description` longtext COMMENT '接口描述',
  `apiHeader` varchar(255) DEFAULT NULL COMMENT '請(qǐng)求頭',
  `request` longtext COMMENT '請(qǐng)求內(nèi)容 (JSON format)',
  `response` longtext COMMENT '響應(yīng)內(nèi)容 (JSON format)',
  `createTime` datetime DEFAULT '1900-01-01 00:00:00' COMMENT '創(chuàng)建時(shí)間',
  `updateTime` datetime DEFAULT '1900-01-01 00:00:00' COMMENT '更新時(shí)間',
  `createUser` varchar(30) DEFAULT NULL COMMENT '創(chuàng)建人',
  `moduleId` bigint NOT NULL COMMENT '所屬模塊id',
  `host` varchar(255) DEFAULT NULL COMMENT '接口域名',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='接口定義表';

2. 列表接口

(1)實(shí)體類(lèi) ApiDefinition

@Data
@TableName("api_definition")
public class ApiDefinition {
    @TableId(type = IdType.AUTO)
    private Long id;
    private Long projectId;
    private String name;
    private String method;
    private String path;
    private String host;
    private String description;
    private String apiHeader;
    private String request;
    private String response;
    private Long moduleId;
    private String createUser;
    @TableField(fill = FieldFill.INSERT)        // 新增的時(shí)候填充數(shù)據(jù)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE) // 新增或修改的時(shí)候填充數(shù)據(jù)
    private Date updateTime;
}

(2)DAO層

@Repository
public interface ApiDefinitionDAO extends BaseMapper<ApiDefinition> {
}

(3)Controller 層

@RestController
@RequestMapping("apiDefinition")
public class ApiDefinitionController {
    @Autowired
    ApiDefinitionService apiDefinitionService;
    @GetMapping("/list/{projectId}/{moduleId}/{currentPage}/{pageSize}")
    public Result list(@PathVariable Long projectId,
                       @PathVariable Long moduleId,
                       @PathVariable int currentPage,
                       @PathVariable int pageSize) {
        IPage<ApiDefinition> IPageProject = apiDefinitionService.list(projectId, moduleId, currentPage, pageSize);
        return Result.success(IPageProject);
    }
}

這里路徑有 4 個(gè)參數(shù),moduleId 用來(lái)查詢模塊下的所有接口(包含本節(jié)點(diǎn)+子節(jié)點(diǎn)),后面2個(gè)則是分頁(yè)查詢參數(shù)。

(4)Service 層

在 service 層實(shí)現(xiàn) list 方法,用來(lái)查詢接口。

@Service
public class ApiDefinitionService {
    @Autowired
    ApiDefinitionDAO apiDefinitionDAO;
    @Autowired
    ApiModuleDAO apiModuleDAO;
    public IPage<ApiDefinition> list(Long projectId, Long moduleId, int currentPage, int pageSize) {
        // 查詢項(xiàng)目id下所有模塊
        QueryWrapper<ApiModule> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("projectId", projectId);
        List<ApiModule> apiModules = apiModuleDAO.selectList(queryWrapper);
        // 調(diào)用遞歸查詢,childrenIds存放查詢到的模塊 id
        List<Long> childrenIds = new ArrayList<>();
        List<Long> ids = moduleRecursion(childrenIds, apiModules, moduleId);
        // 添加上入?yún)⒌哪Kid
        ids.add(moduleId);
        // 查詢模塊id下的api
        Page<ApiDefinition> pageApiDefinition = new Page<>(currentPage, pageSize);
        QueryWrapper<ApiDefinition> queryApiWrapper = new QueryWrapper<>();
        queryApiWrapper.in("moduleId", ids)
                       .orderByDesc("id");
        return apiDefinitionDAO.selectPage(pageApiDefinition, queryApiWrapper);
    }
    private List<Long> moduleRecursion(List<Long> children, List<ApiModule> modules, Long pid) {
        for (ApiModule apiModule : modules) {
            //遍歷出父id等于pid,add進(jìn)子節(jié)點(diǎn)集合
            if (apiModule.getParentId().equals(pid)) {
                // 遞歸遍歷下一級(jí)
                moduleRecursion(children, modules, apiModule.getId());
                children.add(apiModule.getId());
            }
        }
        return children;
    }
}

list方法中調(diào)用遞歸查詢方法moduleRecursion,有3個(gè)參數(shù):

  • List<Long> children:用來(lái)存放子節(jié)點(diǎn)的 id,最后返回出來(lái)
  • List<ApiModule> modules:項(xiàng)目id下的模塊
  • Long pid:就是當(dāng)前要查詢的模塊id

for 循環(huán)遍歷項(xiàng)目下的所有模塊id,每一層里判斷apiModule.getParentId().equals(pid),相等的話繼續(xù)遞歸遍歷,最后把結(jié)果返回。

list方法拿到之后,還有一步別忘記了,就是入?yún)⒌倪@個(gè)模塊本身,也需要加進(jìn)去ids.add(moduleId),最后進(jìn)行分頁(yè)查詢。

在表里加點(diǎn)測(cè)試數(shù)據(jù),然后測(cè)試下查詢接口沒(méi)問(wèn)題。

二、前端

1. 準(zhǔn)備工作

新建apiDefinition.js文件,存放接口。

import request from '@/utils/request'
export function getApiListByModuleId(projectId, moduleId, current, size) {
  return request({
    url: `/bloomtest/apiDefinition/list/${projectId}/${moduleId}/${current}/${size}`,
    method: 'get'
  })
}

接著,去掉之前寫(xiě)死的假數(shù)據(jù),變成空數(shù)組,從后端接口拿到的數(shù)組就放到這。

2. 請(qǐng)求接口

組件里有個(gè)事件node-click,節(jié)點(diǎn)被點(diǎn)擊時(shí)的回調(diào)。

這里綁定了一個(gè)方法getApi,在這個(gè)方法里會(huì)進(jìn)行接口請(qǐng)求的操作,來(lái)實(shí)現(xiàn)這個(gè)方法:

傳入 data 是可以獲得節(jié)點(diǎn) id 的,可以直接用。

注意,這里還是需要用到一個(gè)中間字段currentNode,本來(lái)沒(méi)有用直接使用 data,后來(lái)發(fā)現(xiàn)點(diǎn)擊分頁(yè)的時(shí)候有bug。

這是因?yàn)?data 是點(diǎn)擊左側(cè)樹(shù)節(jié)點(diǎn)的時(shí)候才有,所以還是先存起來(lái)。

列表中的這些prop的值注意跟接口返回的字段對(duì)應(yīng)。

分頁(yè)的地方,注意下調(diào)用的方法即可。

3. 測(cè)試效果

在表里新建了個(gè)數(shù)據(jù),點(diǎn)擊這個(gè)接口關(guān)聯(lián)的模塊,列表可以呈現(xiàn)數(shù)據(jù)。

4. 發(fā)現(xiàn)問(wèn)題

問(wèn)題1

功能實(shí)現(xiàn)了,但是發(fā)現(xiàn)了個(gè)問(wèn)題。

就是當(dāng)我點(diǎn)擊節(jié)點(diǎn)上的 添加、編輯等按鈕的時(shí)候,也會(huì)觸發(fā)這個(gè)事件,調(diào)用了接口列表的方法。

但是看在不影響各自功能的使用,先不去管它。

問(wèn)題2

剛才我測(cè)試是在項(xiàng)目3下進(jìn)行的,是可以查出來(lái)一條數(shù)據(jù)。但是當(dāng)我切換項(xiàng)目到還沒(méi)數(shù)據(jù)的項(xiàng)目2下,頁(yè)面沒(méi)有刷新,還是呈現(xiàn)的剛才的數(shù)據(jù)。

修改方法就是當(dāng)切換項(xiàng)目的時(shí)候,查詢出這個(gè)項(xiàng)目下的所有接口數(shù)據(jù)。

找到下來(lái)框的元素,之前已經(jīng)綁定過(guò)一個(gè)方法queryModuleList,然后現(xiàn)在再加一個(gè)方法,用來(lái)查詢項(xiàng)目下的接口。

@change="queryModuleList();initProjectApi()",方法加上括號(hào),2個(gè)方法用;隔開(kāi)。

實(shí)現(xiàn)這個(gè)新的方法initProjectApi

依然是調(diào)用列表接口,這里的模塊id可以直接傳 0,因?yàn)樗许?xiàng)目下的模塊,頂級(jí)的節(jié)點(diǎn)id都是 0 。

測(cè)試功能正常。

以上就是springboot vue測(cè)試列表遞歸查詢子節(jié)點(diǎn)下的接口功能實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于springboot vue列表遞歸查詢的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 通過(guò)pipeline配置sonar自動(dòng)化實(shí)現(xiàn)過(guò)程解析

    通過(guò)pipeline配置sonar自動(dòng)化實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了通過(guò)pipeline配置sonar自動(dòng)化實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 聊聊springboot中整合log4g2的問(wèn)題

    聊聊springboot中整合log4g2的問(wèn)題

    這篇文章主要介紹了springboot中整合log4g2的方法,自定義文件名需要在application.yml中配置,在config中配置log4g2.xml文件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-11-11
  • SpringBoot訪問(wèn)外部文件及默認(rèn)路由問(wèn)題

    SpringBoot訪問(wèn)外部文件及默認(rèn)路由問(wèn)題

    這篇文章主要介紹了SpringBoot訪問(wèn)外部文件及默認(rèn)路由問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 深入淺析Mybatis的缺陷問(wèn)題

    深入淺析Mybatis的缺陷問(wèn)題

    Mybatis是業(yè)界非常流行的持久層框架,輕量級(jí)、易用,在金融IT領(lǐng)域完全是領(lǐng)軍地位,比Hibernate更受歡迎,優(yōu)勢(shì)非常多,也是非常值得我們學(xué)習(xí)的。這篇文章主要介紹了Mybatis的缺陷問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • java控制臺(tái)打印本月的日歷

    java控制臺(tái)打印本月的日歷

    這篇文章主要為大家詳細(xì)介紹了java控制臺(tái)打印本月的日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • java Clone接口和深拷貝詳解

    java Clone接口和深拷貝詳解

    今天小編就為大家分享一篇關(guān)于Java Clonable接口和深拷貝詳解上的深入了解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2021-08-08
  • java compare compareTo方法區(qū)別詳解

    java compare compareTo方法區(qū)別詳解

    本文主要介紹了java compare compareTo方法區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java數(shù)據(jù)脫敏常用方法(3種)

    Java數(shù)據(jù)脫敏常用方法(3種)

    數(shù)據(jù)脫敏常用在電話號(hào)碼和身份證號(hào),本文主要介紹了Java數(shù)據(jù)脫敏常用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • SpringBoot集成MyBatis的多種方式

    SpringBoot集成MyBatis的多種方式

    本文深入解析了Spring Boot集成MyBatis的多種方式,包括XML配置、注解配置以及MyBatis的動(dòng)態(tài)SQL等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Spring Data Jpa 自動(dòng)生成表結(jié)構(gòu)的方法示例

    Spring Data Jpa 自動(dòng)生成表結(jié)構(gòu)的方法示例

    這篇文章主要介紹了Spring Data Jpa 自動(dòng)生成表結(jié)構(gòu)的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論