【郑州校区】学成在线 第1天 讲义-项目概述 CMS接口开发 七
6.3 Service
定义页面查询方法,根据条件查询暂时不实现:
[AppleScript] 纯文本查看 复制代码 package com.xuecheng
.manage_cms.service;
import com.xuecheng
.framework.domain.cms.CmsPage;
import com.xuecheng
.framework.domain.cms.request.
QueryPageRequest;
import com.xuecheng
.framework.model.response.CommonCode;
import com.xuecheng
.framework.model.response.
QueryResponseResult;
import com.xuecheng
.framework.model.response.
QueryResult;
import com.xuecheng
.manage_cms.dao.CmsPageRepository;
import org
.springframework.beans.factory
.annotation.Autowired;
import org
.springframework.data.domain.Page;
import org
.springframework.data.domain.PageRequest;
import org
.springframework.data.domain.Pageable;
import org
.springframework.stereotype.Service;
@Service
public class PageService {
@Autowired
CmsPageRepository cmsPageRepository;
/
**
*
页面列表分页查询
*
@param page 当前页码
*
@param size 页面显示个数
*
@param queryPageRequest 查询条件
*
@return 页面列表
*
/
public QueryResponseResult findList(int page,int size,QueryPageRequest queryPageRequest){
if (queryPageRequest
== null) {
queryPageRequest
= new QueryPageRequest();
}
if (page <
=
0) {
page
= 1;
}
page
=
page
‐
1;//为了适应mongodb的接口将页码减1
if (size <
=
0) {
size
= 20;
}
//分页对象
Pageable pageable
= new PageRequest(page, size);
//分页查询
Page<CmsPage> all =
cmsPageRepository
.findAll(pageable);
QueryResult<CmsPage> cmsPageQueryResult
= new QueryResult<CmsPage>();
cmsPageQueryResult.setList(all.
getContent());
cmsPageQueryResult.setTotal(all.
getTotalElements());
//返回结果
return new QueryResponseResult(CommonCode.SUCCESS,cmsPageQueryResult);
}
}
6.4 Controller
使用springMVC完成接口实现开发。
[AppleScript] 纯文本查看 复制代码 package com.xuecheng
.manage_cms.web.controller;
import com.xuecheng
.api.cms.CmsPageControllerApi;
import com.xuecheng
.framework.domain.cms.request.
QueryPageRequest;
import com.xuecheng
.framework.model.response.
QueryResponseResult;
import com.xuecheng
.manage_cms.service.PageService;
import org
.springframework.beans.factory
.annotation.Autowired;
import org
.springframework.web.bind.annotation.PathVariable;
import org
.springframework.web.bind.annotation.RestController;
@RestController
public class CmsPageController implements CmsPageControllerApi {
@Autowired
PageService pageService;
@Override
@GetMapping(
"
/list/{page}/{size}
"
)
public QueryResponseResult findList(@PathVariable(
"
page
"
) int page, @PathVariable(
"
size
"
)
int size, QueryPageRequest queryPageRequest) {
return pageService.findList(page,size,queryPageRequest);
}
}
使用浏览器测试
输入:http://localhost:31001/cms/page/list/1/10 查询第1页,每页显示10条记录。
6.6 接口开发规范
6.6.1 Api请求及响应规范
为了严格按照接口进行开发,提高效率,对请求及响应格式进行规范化。
1、get 请求时,采用key/value格式请求,SpringMVC可采用基本类型的变量接收,也可以采用对象接收。
2、Post请求时,可以提交form表单数据(application/x-www-form-urlencoded)和Json数据(Content-Type=application/json),文件等多部件类型(multipart/form-data)三种数据格式,SpringMVC接收Json数据使用@RequestBody注解解析请求的json数据。
4、响应结果统一信息为:是否成功、操作代码、提示信息及自定义数据。
5、响应结果统一格式为json。
6.6.2 Api定义约束
Api定义使用SpringMVC来完成,由于此接口后期将作为微服务远程调用使用,在定义接口时有如下限制:
1、@PathVariable 统一指定参数名称,如:@PathVariable("id")
2、@RequestParam统一指定参数名称,如:@RequestParam("id")
7 页面查询接口测试
上边的代码是基于服务端编写接口,如果前端人员等待服务端人员将接口开发完毕再去开发前端内容这样做效率是非常低下的,所以当接口定义完成,可以使用工具生成接口文档,前端人员查看接口文档即可进行前端开发,这样前端和服务人员并行开发,大大提高了生产效率。
本章节介绍两种接口开发工具,Swagger和Postman。
7.1 Swagger
7.1.1 Swagger介绍
OpenAPI规范(OpenAPI Specifification 简称OAS)是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范RESTful服务开发过程,目前版本是V3.0,并且已经发布并开源在github上。
(https://github.com/OAI/OpenAPI-Specifification)
Swagger是全球最大的OpenAPI规范(OAS)API开发工具框架,支持从设计和文档到测试和部署的整个API生命周期的开发。 (https://swagger.io/)
Spring Boot 可以集成Swagger,生成Swagger接口,Spring Boot是Java领域的神器,它是Spring项目下快速构建项目的框架。
7.1.2 Swagger常用注解
在Java类中添加Swagger的注解即可生成Swagger接口,常用Swagger注解如下:
@Api:修饰整个类,描述Controller的作用 @ApiOperation:描述一个类的一个方法,或者说一个接口
@ApiParam:单个参数描述 @ApiModel:用对象来接收参数 @ApiModelProperty:用对象接收参数时,描述对象的一个字段 @ApiResponse:HTTP响应其中1个描述 @ApiResponses:HTTP响应整体描述 @ApiIgnore:使用该注解忽略这个API @ApiError :发生错误返回的信息 @ApiImplicitParam:一个请求参数
@ApiImplicitParams:多个请求参数
@ApiImplicitParam属性:
7.1.3 Swagger接口定义
修改接口工程中页面查询接口,添加Swagger注解。
[AppleScript] 纯文本查看 复制代码 @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) ;
}
在QueryPageRequest类中使用注解 ApiModelProperty 对属性注释:
[AppleScript] 纯文本查看 复制代码 @Data
public class QueryPageRequest extends RequestData {
//站点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;
}
|