學成在線開發日誌01(服務端查詢所有頁面接口開發、lombok的使用、MongoRepository分頁Pageable的使用、SwaggerUI註解)


歡迎訪問筆者個人技術博客:http://rukihuang.xyz/

CMS服務端工程搭建

1 導入基礎工程

1.1 基礎工程目錄

  • parent:父工程,提供依賴管理
  • common:通用工程,提供各層封裝
  • model:模型工程,提供統一的模型類管理
  • utils:工具類工程,提供項目的工具類
  • api:接口工程,統一管理項目的服務接口

在這裏插入圖片描述

在這裏插入圖片描述

2 #需求開發#

2.1 需求分析

  1. 分頁查詢CmsPage 集合下的數據
  2. 根據站點Id、模板Id、頁面別名查詢頁面信息
  3. 接口基於Http Get請求,響應Json數據

2.2 定義接口

  • 在api工程中專門定義接口,方便接口的集中管理
@Api(value = "cms頁面管理接口", description = "cms頁面管理接口,提供頁面的增刪改查")
public interface CmsPageControllerApi {
    //頁面查詢
    @ApiOperation("分頁查詢列表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "page", value = "頁碼", required = true, paramType = "path", dataType = "int"),
            @ApiImplicitParam(name = "size", value = "每頁記錄數", required = true, paramType = "path", dataType = "int")
    })
    public QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest);
}

2.3 創建cms模塊(xc-service-manage-cms)

  • 包結構

在這裏插入圖片描述

2.3.1 application.yml

server:
  port: 31001 #服務器端口
spring:
  application:
    name: xc‐service‐manage‐cms #應用名
  data:
    mongodb: #數據庫
      uri: mongodb://localhost:27017  
      database: xc_cms

2.3.2 ManageCmsApplication(SpringBoot啓動類)

package com.xuecheng.manage_cms;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@EntityScan("com.xuecheng.framework.domain.cms")//掃描實體類
@ComponentScan(basePackages = "com.xuecheng.api")//掃描接口
@ComponentScan(basePackages = "com.xuecheng.manage_cms")//掃描本項目下的所有類
public class ManageCmsApplication {
    public static void main(String[] args) {
        SpringApplication.run(ManageCmsApplication.class);
    }
}

2.3.3 CmsPageController

@RestController
@RequestMapping("/cms/page")
public class CmsPageController implements CmsPageControllerApi {
    @Autowired
    private IPageService pageService;

    @Override
    @GetMapping("/list/{page}/{size}")
    public QueryResponseResult findList(@PathVariable("page") int page, @PathVariable("size") int size, QueryPageRequest queryPageRequest) {
        //暫時使用靜態數據進行測試
        /*QueryResult queryResult = new QueryResult();
        List<CmsPage> list = new ArrayList<>();
        CmsPage page1 = new CmsPage();
        list.add(page1);
        page1.setPageName("測試頁面");
        queryResult.setList(list);
        queryResult.setTotal(list.size());
        QueryResponseResult responseResult = new QueryResponseResult(CommonCode.SUCCESS, queryResult);*/

        return pageService.findList(page, size, queryPageRequest);
    }
}

2.3.4 PageServiceImpl

@Service
public class PageServiceImpl implements IPageService {
    @Autowired
    private CmsPageRepository cmsPageRepository;

    /**
     * 頁面查詢方法
     * @param page 傳入的第1頁,應該是數據庫的第0條
     * @param size
     * @param queryPageRequest
     * @return
     */
    @Override
    public QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest) {
        if (queryPageRequest == null) {
            queryPageRequest = new QueryPageRequest();
        }

        //分頁查詢
        if (page <= 0) {
            page = 1;
        }
        page = page - 1;
        if (size <= 0) {
            size = 10;
        }
        Pageable pageable = PageRequest.of(page, size);
        Page<CmsPage> pages = cmsPageRepository.findAll(pageable);//分頁查詢

        QueryResult queryResult = new QueryResult();
        queryResult.setList(pages.getContent());//數據列表
        queryResult.setTotal(pages.getTotalElements());//數據總記錄數
        QueryResponseResult queryResponseResult = new QueryResponseResult(CommonCode.SUCCESS, queryResult);
        return queryResponseResult;
    }
}

2.3.5 CmsPageRepository

public interface CmsPageRepository extends MongoRepository<CmsPage, String> {
    //CmsPageRepository有默認的findAll方法
}

學習總結

1 lombok的使用

1.1 簡介

  • Lombok是一個實用的java工具,使用它可以消除java代碼的臃腫,Lombok提供一系列的註解,使用這些註解可以不用定義getter/setter、equals、構造方法等,它會在編譯時在字節碼文件自動生成這些通用的方法,簡化開發人員的工作。
  • 項目地址

1.2 使用方法

1.2.1 添加Lombok依賴

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>${lombok.version}</version>
</dependency>

2.2.2 IDEA安裝Lombok插件

在這裏插入圖片描述

1.2.3 模型中添加註解

@Data //自動生成 getter setter
@ToString //自動生成 toString()
@Document(collection = "cms_template") //SpringDataMongodb提供的註解,與Mongodb數據庫中的集合進行匹配
public class CmsTemplate {

    //站點ID
    private String siteId;
    //模版ID
    @Id
    private String templateId;
    //模版名稱
    private String templateName;
    //模版參數
    private String templateParameter;

    //模版文件Id
    private String templateFileId;
}

2 分頁查詢

@Service
public class PageServiceImpl implements IPageService {
    @Autowired
    private CmsPageRepository cmsPageRepository;

    /**
     * 頁面查詢方法
     * @param page 傳入的第1頁,應該是數據庫的第0條
     * @param size
     * @param queryPageRequest
     * @return
     */
    @Override
    public QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest) {
        if (queryPageRequest == null) {
            queryPageRequest = new QueryPageRequest();
        }

        //分頁查詢
        if (page <= 0) {
            page = 1;//當前頁
        }
        page = page - 1;
        if (size <= 0) {
            size = 10;//一頁展示的容量
        }
        //設置分頁查詢條件
        Pageable pageable = PageRequest.of(page, size);
        Page<CmsPage> pages = cmsPageRepository.findAll(pageable);//分頁查詢

        QueryResult queryResult = new QueryResult();
        queryResult.setList(pages.getContent());//數據列表
        queryResult.setTotal(pages.getTotalElements());//數據總記錄數
        QueryResponseResult queryResponseResult = new QueryResponseResult(CommonCode.SUCCESS, queryResult);
        return queryResponseResult;
    }
}

2.1 設置Pageable分頁條件

Pageable pageable = PageRequest.of(page, size);
Page<CmsPage> pages = cmsPageRepository.findAll(pageable);

3 Swagger-ui

3.1 Swagger-ui介紹

  • swagger是全球最大的OpenApi規範開發工具框架,支持從設計到文檔到測試和部署的整個API生命週期
  • SpringBoot可以集成Swagger,生成Swagger接口。

3.2 Swagger常用註解

  • @Api:修飾整個類,描述Controller的作用
  • @ApiOperation:描述類中的一個接口
  • @ApiParam:單個參數描述
  • @ApiModel:用對象來接收參數
  • @ApuModelProperty:用對象接收參數時,描述對象的一個字段
  • @ApiResponse:HTTP響應其中1個描述
  • @ApiResponses:HTTP響應整體描述
  • @ApiIgnore:使用該註解忽略這個接口
  • @ApiError:發生錯誤返回的信息
  • @ApiImplicitParam:一個請求參數
  • @ApiImplicitParams:多個請求參數

3.2.1 @ApiImplicitParam 屬性

屬性 取值 作用
paramType 查詢參數類型
path 以地址的形式提交數據
query 直接跟參數完成自動映射賦值
body 以流的形式提交,僅支持POST
header 參數在request headers裏邊提交
form 以form表單的形式提交,僅支持POST
dataType 參數的數據類型,只作爲標誌說明,並沒有實際驗證
Long
String
name 接收參數名
value 接收參數的意義描述
required 參數是否必填
true 必填
false 非必填
defaultValue 默認值

3.3 Swagger接口定義

  • 接口API
@Api(value = "cms頁面管理接口", description = "cms頁面管理接口,提供頁面的增刪改查")
public interface CmsPageControllerApi {
    //頁面查詢
    @ApiOperation("分頁查詢列表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "page", value = "頁碼", required = true, paramType = "path", dataType = "int"),
            @ApiImplicitParam(name = "size", value = "每頁記錄數", required = true, paramType = "path", dataType = "int")
    })
    public QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest);
}
  • 實體類
@Data
public class QueryPageRequest {
    //接收頁面查詢的查詢條件
    //站點id
    @ApiModelProperty("站點ID")
    private String siteId;
    //頁面id
    @ApiModelProperty("頁面id")
    private String pageId;
    //頁面別名
    @ApiModelProperty("頁面別名")
    private String pageName;
    //別名
    @ApiModelProperty("別名")
    private String pageAliase;
    //模板id
    @ApiModelProperty("模板id")
    private String templateId;
    //...
}

3.4 Swagger接口測試

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章