歡迎訪問筆者個人技術博客:http://rukihuang.xyz/
CMS服務端工程搭建
1 導入基礎工程
1.1 基礎工程目錄
- parent:父工程,提供依賴管理
- common:通用工程,提供各層封裝
- model:模型工程,提供統一的模型類管理
- utils:工具類工程,提供項目的工具類
- api:接口工程,統一管理項目的服務接口
2 #需求開發#
2.1 需求分析
- 分頁查詢CmsPage 集合下的數據
- 根據站點Id、模板Id、頁面別名查詢頁面信息
- 接口基於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;
//...
}