网站设计主题有哪些,国外做行程的网站,网站建设江西,2015做导航网站好如果是一个人把啥都开发了#xff0c;那用不到Swagger-UI#xff0c;但一般情况是前后端分离的#xff0c;所以就需要告诉前端开发人员都有哪些接口#xff0c;传入什么参数#xff0c;怎么调用#xff0c;返回什么。有了Swagger-UI就能把这部分文档编写的业务给省去了。…如果是一个人把啥都开发了那用不到Swagger-UI但一般情况是前后端分离的所以就需要告诉前端开发人员都有哪些接口传入什么参数怎么调用返回什么。有了Swagger-UI就能把这部分文档编写的业务给省去了。 Swagger-UI是HTML, Javascript, CSS的一个集合可以动态地根据注解生成在线API文档。 Swagger是通过扫描注册生成文档的常用的注解有
Api用于修饰Controller类生成Controller相关文档信息ApiOperation用于修饰Controller类中的方法生成接口方法相关文档信息ApiParam用于修饰接口中的参数生成接口参数相关文档信息ApiModelProperty用于修饰实体类的属性当实体类是请求参数或返回结果时直接生成相关文档信息
和上一篇文章介绍Mybatis-Gen一样Swagger生成文档也是三要素
环境配置执行
GetStart
首先添加项目依赖在pom.xml里面
!--Swagger-UI API文档生产工具--
dependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger2/artifactIdversion2.7.0/version
/dependency
dependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger-ui/artifactIdversion2.7.0/version
/dependency接下来要搞定配置文件配置文件就简单啦就是指定扫描方式以及文档属性
Swagger2Config.java
package org.lange.study.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;Configuration
EnableSwagger2
public class Swagger2Config {Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()//Swagger对生成API文档的范围有三种不同的选择//1. 生成指定包下面的类的API文档//2. 生成有指定注解的类的API文档//3. 生成有指定注解的方法的API文档//这里指定为当前包下controller生成API文档.apis(RequestHandlerSelectors.basePackage(org.lange.study.controller))//为有Api注解的Controller生成API文档
// .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))//为有ApiOperation注解的方法生成API文档
// .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title(SwaggerUI演示).description(mall).contact(zhonglunshun).version(1.0).build();}
}
配置好了接下来我们需要在controller里面加一些内容不然会扫描不到看不出来效果正好趁机把业务补充一下添加增删查改。
定义一个业务接口PmsBrandService.java
package org.lange.study.service;import org.lange.study.mbg.model.PmsBrand;import java.util.List;public interface PmsBrandService {ListPmsBrand listAllBrand();int createBrand(PmsBrand brand);int updateBrand(Long id, PmsBrand brand);int deleteBrand(Long id);ListPmsBrand listBrand(int pageNum, int pageSize);PmsBrand getBrand(Long id);
}
然后实现之PmsBrandServiceImpl.java这个时候实现真的超级简单了就是用前面一篇文章用到的Mybatis-gen生成的代码去查询操作就好了通常查询会用到分页查询分页查询很简单所以这里一起说下了 Pom文件引入分页查询依赖 !--MyBatis分页插件--dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper-spring-boot-starter/artifactIdversion1.4.5/version/dependency然后在list方法开始的时候执行startpage就ok了关于Mabatis生成的基本Sql功能这里不多介绍了有兴趣的可以去看下Mybatis的详细使用扩展一下
PmsBrandServiceImpl.java
package org.lange.study.service.impl;import com.github.pagehelper.PageHelper;
import org.lange.study.mbg.mapper.PmsBrandMapper;
import org.lange.study.mbg.model.PmsBrand;
import org.lange.study.mbg.model.PmsBrandExample;
import org.lange.study.service.PmsBrandService;
import org.springframework.beans.factory.annotation.Autowired;import java.util.List;public class PmsBrandServiceImpl implements PmsBrandService {Autowiredprivate PmsBrandMapper brandMapper;Overridepublic ListPmsBrand listAllBrand() {return brandMapper.selectByExample(new PmsBrandExample());}Overridepublic int createBrand(PmsBrand brand) {return brandMapper.insertSelective(brand);}Overridepublic int updateBrand(Long id, PmsBrand brand) {brand.setId(id);return brandMapper.updateByPrimaryKeySelective(brand);}Overridepublic int deleteBrand(Long id) {return brandMapper.deleteByPrimaryKey(id);}Overridepublic ListPmsBrand listBrand(int pageNum, int pageSize) {PageHelper.startPage(pageNum, pageSize);return brandMapper.selectByExample(new PmsBrandExample());}Overridepublic PmsBrand getBrand(Long id) {return brandMapper.selectByPrimaryKey(id);}
}
其他地方都很好理解list接口这里我们发现他返回的是一个用CommonPage封装的page对象为什么要这么做呢因为我们用分页查询后希望客户端在接受后更方便地处理查询的数据列表因此需要告诉他查询了什么怎么查询的。
PageHelper维护了每次的查询结果所以它能自动帮我们分页后封装这个是引入分页查询的好处看下CommonPage的封装就明白了
package org.lange.study.common.api;import com.github.pagehelper.PageInfo;import java.util.List;/*** 分页数据封装类*/
public class CommonPageT {private Integer pageNum;private Integer pageSize;private Integer totalPage;private Long total;private ListT list;/*** 将PageHelper分页后的list转为分页信息*/public static T CommonPageT restPage(ListT list) {CommonPageT result new CommonPageT();PageInfoT pageInfo new PageInfoT(list);result.setTotalPage(pageInfo.getPages());result.setPageNum(pageInfo.getPageNum());result.setPageSize(pageInfo.getPageSize());result.setTotal(pageInfo.getTotal());result.setList(pageInfo.getList());return result;}public Integer getPageNum() {return pageNum;}public void setPageNum(Integer pageNum) {this.pageNum pageNum;}public Integer getPageSize() {return pageSize;}public void setPageSize(Integer pageSize) {this.pageSize pageSize;}public Integer getTotalPage() {return totalPage;}public void setTotalPage(Integer totalPage) {this.totalPage totalPage;}public ListT getList() {return list;}public void setList(ListT list) {this.list list;}public Long getTotal() {return total;}public void setTotal(Long total) {this.total total;}
}
到这里其实就可以生成Api文档了Swagger还提供了一种自定义Api注释的生成规则的方法。前面在介绍Bybatis生成器的时候有引入但是并没有介绍怎么用这里顺带提一下。 CommentGenerator为MyBatis Generator的自定义注释生成器简单理解就是Swagger在生成Api的时候同时能给代码生成注释直接修改代码这当然很好但是有些时候我们觉得他添加的不美观想自己定制一下那就需要配置这个 CommentGenerator.java /*** 自定义注释生成器*/
public class CommentGenerator extends DefaultCommentGenerator {private boolean addRemarkComments false;/*** 设置用户配置的参数这个属性对应的就是项目中引入的properties文件* 这里表示读取名为addRemarkComments的属性*/Overridepublic void addConfigurationProperties(Properties properties) {super.addConfigurationProperties(properties);this.addRemarkComments StringUtility.isTrue(properties.getProperty(addRemarkComments));}/*** 给字段添加注释如果需要添加且注释不是空的那就给他加一下*/Overridepublic void addFieldComment(Field field, IntrospectedTable introspectedTable,IntrospectedColumn introspectedColumn) {String remarks introspectedColumn.getRemarks();//根据参数和备注信息判断是否添加备注信息if (addRemarkComments StringUtility.stringHasValue(remarks)) {addFieldJavaDoc(field, remarks);}}/*** 给model的字段添加注释以/** **/的方式里面就一行一行的家。当然咯你也可以根据自己喜欢来定制*/private void addFieldJavaDoc(Field field, String remarks) {//文档注释开始field.addJavaDocLine(/**);//获取数据库字段的备注信息String[] remarkLines remarks.split(System.getProperty(line.separator));for (String remarkLine : remarkLines) {field.addJavaDocLine( * remarkLine);}
// addJavadocTag(field, false);field.addJavaDocLine( */);}} 这个时候注释就出来了。然后我们看下接口文档是不是也生成了 接口地址http://localhost:8080/swagger-ui.html