05-CMS需求分析-什么是CMS
什么是CMS?
CMS (Content Management System)即内容管理系统,不同的项目对CMS的定位不同。
CMS有哪些类型?
每个公司对每个项目的CMS定位不同,CMS基本上分为:针对后台数据内容的管理、针对前端页面的管理、针对样式风格的管理等 。
本项目CMS的定位是什么?
本项目作为一个大型的在线教育平台,对CMS系统的定位是对各各网站(子站点)页面的管理,主要管理由于运营需要而经常变动的页面,从而实现根据运营需要快速进行页面开发、上线的需求。
06-CMS需求分析-静态门户工程搭建
门户,是一个网站的入口,一般网站都有一个对外的门户。我们首先搭建学成网的静态门户工程,根据门户的页面结构来分析页面的管理方案。
1、安装WebStorm
2、安装Nginx
3、导入门户工程
创建nginx的配置文件 xcEdu2019.conf
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server{ listen 80; server_name www.xuecheng.com; ssi on; ssi_silent_errors on; location / { alias F:/xcEdu/xcEduUI01/xc-ui-pc-static-portal/; index index.html; } } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
在WIN10系统下启动nginx的 命令行
#Shift+鼠标右键 启动Powershell蓝色窗口 F:javaweb ginx-1.16.1> ls #powershell启动和关闭nginx.exe服务 . ginx -c confxcEdu2019.conf . ginx -s stop #重新加载配置文件不用再次指定文件名 . ginx -s reload
访问 :http://localhost
修改系统hosts文件的属性,去掉只读选项。
C:WindowsSystem32driversetc
启用SwitchHosts!开发工具并录入
127.0.0.1 www.xuecheng.com
07-CMS需求分析-SSI服务端包含技术
1、页面内容多如何管理?
将页面拆分成一个一个的小页面,通过cms去管理这些小页面,当要更改部分页面内容时只需要更改具体某个小页面即可 。
2、页面拆出来怎么样通过web服务浏览呢?
使用web服务(例如nginx)的SSI技术,将多个子页面合并渲染输出。
3、SSI具体是指什么?
nginx配置文件,开启SSI支持功能
server{ listen 80; server_name www.xuecheng.com; ssi on; ssi_silent_errors on; ssi_types text/html; location / { alias F:/xcEdu/xcEduUI01/xc-ui-pc-static-portal/; index index.html; } }
SSI包含类似于jsp页面中的incluce指令,ssi是在web服务端将include指定 的页面包含在网页中,渲染html网页响应给客户端 。nginx、apache等多数web容器都支持SSI指令。
ssi指令如下: <!‐‐#include virtual="/../....html"‐‐>
08-CMS需求分析-CMS页面管理需求
3.3 CMS页面管理需求
2、本项目要实现什么样的功能?
1)创建站点:
一个网站有很多子站点,比如:学成在线有主门户、学习中心、问答系统等子站点。
2)创建模板:
页面如何创建呢?比如电商网站的商品详情页面,每个页面的内容布局、板式是相同的,不同的只是内容,这个页
面的布局、板式就是页面模板,模板+数据就组成一个完整的页面,最终要创建一个页面文件需要先定义此页面的
模板,最终拿到页面的数据再结合模板就拼装成一个完整的页面。
3)填写页面:
创建页面是指填写页面的基本信息,如:页面的名称、页面的url地址等。
4)页面预览:
页面预览是页面发布前的一项工作,页面预览使用静态化技术根据页面模板和数据生成页面内容,并通过浏览器预
览页面。页面发布前进行页面预览的目是为了保证页面发布后的正确性。
5)页面发布:
使用计算机技术将页面发送到页面所在站点的服务器,页面发布成功就可以通过浏览器来访问了。
页面发布成功,用户即可在浏览器浏览到最新发布的页面,整个页面添加、发布的过程由于软件自动执行,无需人工登录服务器操作。
09-CMS服务端工程搭建-开发工具配置
前后端分离开发,创建不同的文件目录
配置编码格式
-Xms512m -Xmx2048m -XX:ReservedCodeCacheSize=480m
10-CMS服务端工程搭建-导入基础工程
4.2.1 工程结构
CMS及其它服务端工程基于maven进行构建
快捷键Ctrl+Shift+Alt+S 打开项目结构界面
parent工程锁定依赖版本的pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.9.RELEASE</version> </parent> <groupId>com.xuecheng</groupId> <artifactId>xc-framework-parent</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <properties> <java.version>1.8</java.version> <tomcat.version>8.5.45</tomcat.version> <spring-boot.version>2.0.9.RELEASE</spring-boot.version> <springframework.version>5.0.10.RELEASE</springframework.version> <mybatis-spring-boot.version>1.3.3</mybatis-spring-boot.version> <mybatis.version>3.4.6</mybatis.version> <druid.version>1.1.10</druid.version> <mysql-connector-java.version>5.1.45</mysql-connector-java.version> <lombok.version>1.18.8</lombok.version> <commons-io.version>2.6</commons-io.version> <org.apache.commons.io.version>1.3.2</org.apache.commons.io.version> <commons-fileupload.version>1.3.3</commons-fileupload.version> <commons-codec.version>1.10</commons-codec.version> <commons-lang3.version>3.6</commons-lang3.version> <okhttp.version>3.9.1</okhttp.version> <feign-okhttp.version>8.18.0</feign-okhttp.version> <springfox-swagger.version>2.7.0</springfox-swagger.version> <fastjson.version>1.2.30</fastjson.version> <fastdfs-client-java.version>1.27.0.0</fastdfs-client-java.version> <mysql-connector-java.version>5.1.40</mysql-connector-java.version> <elasticsearch.version>6.2.1</elasticsearch.version> <guava.version>24.0-jre</guava.version> </properties> <!--test--> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR2</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector-java.version}</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis-spring-boot.version}</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.10</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>${okhttp.version}</version> </dependency> <dependency> <groupId>com.netflix.feign</groupId> <artifactId>feign-okhttp</artifactId> <version>${feign-okhttp.version}</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons-io.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>${org.apache.commons.io.version}</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>${commons-fileupload.version}</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>${commons-codec.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons-lang3.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>${springfox-swagger.version}</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>${springfox-swagger.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> <dependency> <groupId>net.oschina.zcx7878</groupId> <artifactId>fastdfs-client-java</artifactId> <version>${fastdfs-client-java.version}</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>${elasticsearch.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch --> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>${elasticsearch.version}</version> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>${guava.version}</version> </dependency> </dependencies> </dependencyManagement> <build> <finalName>${project.artifactId}</finalName> <plugins> <!-- <!– 资源文件拷贝插件 –> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin>--> <!-- java编译插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
11-MongoDb入门-安装Mongodb数据库
CMS采用MongoDB数据库存储CMS页面信息,CMS选用Mongodb的原因如下:
1、Mongodb是非关系型数据库,存储Json格式数据 ,数据格式灵活。
2、相比课程管理等核心数据CMS数据不重要,且没有事务管理要求。
win10开发环境下安装mongodb(nosql数据库)
win10开发环境下安装studio3t(mongodb客户端)
mongodb入门
mongodb命令行的使用
16-CMS服务端工程搭建-导入CMS数据库
xc_cms——>导入cms数据库文件.json
17-页面查询接口定义-定义模型-需求分析和模型类
Java数据库实体类对应——>MongoDB数据库的Collections的名称;
在梳理完用户需求后就要去定义前后端的接口,接口定义后前端和后端就可以依据接口去开发功能了。
本次定义页面查询接口,本接口供前端请求查询页面列表,支持分页及自定义条件查询方式。
具体需求如下:
1、分页查询CmsPage 集合下的数据
2、根据站点Id、模板Id、页面别名查询页面信息
3、接口基于Http Get请求,响应Json数据
18-页面查询接口定义-定义接口
Lombok是一个实用的java工具,使用它可以消除java代码的臃肿,Lombok提供一系列的注解,使用这些注解可以不用定义getter/setter、equals、构造方法等,它会在编译时在字节码文件自动生成这些通用的方法 。
@Data注解可以自动生成getter/setter方法,@ToString生成tostring方法。
1、定义请求模型QueryPageRequest,此模型作为查询条件类型为后期扩展需求,请求类型统一继承RequestData类型。
package com.xuecheng.framework.domain.cms.request; import com.xuecheng.framework.model.request.RequestData; import lombok.Data; @Data public class QueryPageRequest extends RequestData { //站点id private String siteId; //页面ID private String pageId; //页面名称 private String pageName; //别名 private String pageAliase; //模版id private String templateId; }
2、响应结果类型,分页查询统一使用QueryResponseResult
在xc-service-api模块,创建一个Package
com.xuecheng.api.cms
在Api接口工程专门定义接口的原因如下:
1、接口集中管理
2、Api工程的接口将作为各微服务远程调用使用。
页面查询接口定义如下:
package com.xuecheng.api.cms; import com.xuecheng.framework.domain.cms.request.QueryPageRequest; import com.xuecheng.framework.model.response.QueryResponseResult; public interface CmsPageControllerApi { //页面查询 public abstract QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest) ; }
此接口编写后会在CMS服务工程编写Controller类实现此接口。
19-页面查询服务端开发-创建CMS服务工程-CMS工程结构
6 页面查询服务端开发
6.1 创建CMS服务工程
创建maven工程, CMS工程的名称为 xc-service-manage-cms,父工程为xc-framework-parent。
pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>xc-framework-parent</artifactId> <groupId>com.xuecheng</groupId> <version>1.0-SNAPSHOT</version> <relativePath>../xc-framework-parent/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>xc-service-manage-cms</artifactId> <dependencies> <dependency> <groupId>com.xuecheng</groupId> <artifactId>xc-service-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.xuecheng</groupId> <artifactId>xc-framework-model</artifactId> <version>1.0-SNAPSHOT</version> <!--排除有版本冲突的依赖--> <exclusions> <exclusion> <groupId>org.jboss</groupId> <artifactId>jandex</artifactId> </exclusion> </exclusions> </dependency> <!--来自hibernate-core的传递依赖--> <dependency> <groupId>org.jboss</groupId> <artifactId>jandex</artifactId> <version>2.0.5.Final</version> </dependency> <dependency> <groupId>com.xuecheng</groupId> <artifactId>xc-framework-utils</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.xuecheng</groupId> <artifactId>xc-framework-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> </dependencies> </project>
https://mvnrepository.com/artifact/org.jboss/jandex
server: port: 31001 spring: application: name: xc-service-manage-cms data: mongodb: uri: mongodb://localhost:27017/xc_cms
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!--定义日志文件的存储地址,使用绝对路径--> <property name="LOG_HOME" value="d:/logs"/> <!-- Console 输出设置 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <fileNamePattern>${LOG_HOME}/xc.%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 异步输出 --> <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --> <discardingThreshold>0</discardingThreshold> <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --> <queueSize>512</queueSize> <!-- 添加附加的appender,最多只能添加一个 --> <appender-ref ref="FILE"/> </appender> <logger name="org.apache.ibatis.cache.decorators.LoggingCache" level="DEBUG" additivity="false"> <appender-ref ref="CONSOLE"/> </logger> <logger name="org.springframework.boot" level="DEBUG"/> <root level="info"> <!--<appender-ref ref="ASYNC"/>--> <appender-ref ref="FILE"/> <appender-ref ref="CONSOLE"/> </root> </configuration>
创建启动类ManageCmsApplication
@SpringBootApplication @EntityScan("com.xuecheng.framework.domain.cms")//扫描实体类 @ComponentScan(basePackages={"com.xuecheng.api"})//扫描接口 @ComponentScan(basePackages={"com.xuecheng.framework"})//扫描common包下的类 @ComponentScan(basePackages={"com.xuecheng.manage_cms"})//扫描本项目下的所有类 public class ManageCmsApplication { public static void main(String[] args) { SpringApplication.run(ManageCmsApplication.class,args); } }
6.1.2 测试Controller
使用springMVC完成接口实现开发,这里暂时使用测试数据,稍后会让controller调用service来查询数据。
@RestController @RequestMapping("/cms/page") 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) { //暂时用静态数据 //定义queryResult QueryResult<CmsPage> queryResult =new QueryResult<>(); List<CmsPage> list = new ArrayList<>(); CmsPage cmsPage = new CmsPage(); cmsPage.setPageName("测试页面"); list.add(cmsPage); queryResult.setList(list); queryResult.setTotal(1); QueryResponseResult queryResponseResult = new QueryResponseResult(CommonCode.SUCCESS,queryResult); return queryResponseResult; //调用service //return pageService.findList(page,size,queryPageRequest); } }
http://localhost:31001/cms/page/list/1/2
6.2 Dao层
21-页面查询服务端开发-Dao-分页查询测试
https://blog.csdn.net/qq_40993412/article/details/104082571
本项目使用Spring Data Mongodb完成Mongodb数据库的查询,Spring Data Mongodb提供一套快捷操作mongodb的方法。
22-页面查询服务端开发-Dao-基础方法测试
Optional是jdk1.8引入的1个类,Optional是一个容器对象,它将我们需要的对象包括起来,使用isPresent方法判断所包含的对象是否为“null”,
可以使用get()取出对象。
//修改(update) @Test public void testUpdate() { //查询对象 Optional<CmsPage> optional = cmsPageRepository.findById("5b4b1d8bf73c6623b03f8cec"); if(optional.isPresent()){ CmsPage cmsPage = optional.get(); //设置要修改值 cmsPage.setPageAliase("test01"); //... //修改 CmsPage save = cmsPageRepository.save(cmsPage); System.out.println(save); } }
6.2.3.4 自定义Dao方法
同Spring Data JPA一样Spring Data mongodb也提供自定义方法的规则,如下:
按照findByXXX,findByXXXAndYYY、countByXXXAndYYY等规则定义方法,实现查询操作。
//根据站点和页面类型分页查询 Page<CmsPage> findBySiteIdAndPageType(String siteId,String pageType, Pageable pageable);
23-页面查询服务端开发-Service及Controller
@Service public class PageService { @Autowired CmsPageRepository cmsPageRepository; /** * 页面查询方法 * @param page 页码,从1开始记数 * @param size 每页记录数 * @param queryPageRequest 查询条件 * @return */ public QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest){ //分页参数 if(page <=0){ page = 1; } page = page -1; if(size<=0){ size = 10; } Pageable pageable = PageRequest.of(page,size); Page<CmsPage> all = cmsPageRepository.findAll(pageable); QueryResult queryResult = new QueryResult(); queryResult.setList(all.getContent());//数据列表 queryResult.setTotal(all.getTotalElements());//数据总记录数 QueryResponseResult queryResponseResult = new QueryResponseResult(CommonCode.SUCCESS,queryResult); return queryResponseResult; } }
使用浏览器测试
输入:http://localhost:31001/cms/page/list/1/10 查询第1页,每页显示10条记录。
24-页面查询服务端开发-接口开发规范
6.6.1 Api请求及响应规范
为了严格按照接口进行开发,提高效率,对请求及响应格式进行规范化。
6.6.1 Api请求及响应规范
为了严格按照接口进行开发,提高效率,对请求及响应格式进行规范化。
1、get 请求时,采用key/value格式请求,SpringMVC可采用基本类型的变量接收,也可以采用对象接收。
2、Post请求时,可以提交form表单数据(application/x-www-form-urlencoded)和Json数据(ContentType=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")
25-页面查询接口测试-Swagger
7 页面查询接口测试
所以当接口定义完成,可以使用工具生成接口文档,前端人员查看接口文档即可进行前端开发 ,这样前端和服务人员并行开发,大大提高了生产效率。
7.1.1 Swagger介绍
OpenAPI规范(OpenAPI Specification 简称OAS)是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范RESTful服务开发过程。
(https://github.com/OAI/OpenAPI-Specification)
Swagger是全球最大的OpenAPI规范(OAS)API开发工具框架,支持从设计和文档到测试和部署的整个API生命周期的开发。
(https://swagger.io/)
Spring Boot 可以集成Swagger,生成Swagger接口文档。
7.1.2 Swagger常用注解
在Java类中添加Swagger的注解即可生成Swagger接口,常用Swagger注解如下:
@Api:修饰整个类,描述Controller的作用 @ApiOperation:描述一个类的一个方法,或者说一个接口
@ApiParam:单个参数描述 @ApiModel:用对象来接收参数 @ApiModelProperty:用对象接收参数时,描述对象的一个字段
@ApiResponse:HTTP响应其中1个描述 @ApiResponses:HTTP响应整体描述 @ApiIgnore:使用该注解忽略这个API
@ApiError :发生错误返回的信息 @ApiImplicitParam:一个请求参数 @ApiImplicitParams:多个请求参数
7.1.4 Swagger接口测试
Swagger接口生成工作原理:
1、系统启动,扫描到api工程中的Swagger2Configuration类
//配置类 @Configuration @EnableSwagger2 public class Swagger2Configuration { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.xuecheng")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("学成网api文档") .description("学成网api文档") // .termsOfServiceUrl("/") .version("1.0") .build(); } }
2、在此类中指定了包路径com.xuecheng,找到在此包下及子包下标记有@RestController注解的controller类。
3、根据controller类中的Swagger注解生成接口文档。
启动cms服务工程,查看接口文档,请求:http://localhost:31001/swagger-ui.html
Insomnia
Postman是一款功能强大的http接口测试工具,使用postman可以完成http各种请求的功能测试。
官方地址:https://www.getpostman.com/