热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vue根据swagger生成接口_Java利用Swagger2自动生成对外接口的文档

一直以来做对外的接口文档都比较原始,基本上都是手写的文档传来传去,最近发现了一个新玩具,可以在接口上省去不少麻烦。swagger是一款方便

一直以来做对外的接口文档都比较原始,基本上都是手写的文档传来传去,最近发现了一个新玩具,可以在接口上省去不少麻烦。

swagger是一款方便展示的API文档框架。它可以将接口的类型最全面的展示给对方开发人员,避免了手写文档的片面和误差行为。

swagger目前有两种swagger和swagger2两种,1比较麻烦,所以不考虑使用。本文主要记录我用swagger2做对外接口的两种方式,方面后面查阅。

一、使用传统的springmvc整合swagger2

1、maven依赖

com.fasterxml.jackson.core

jackson-core

2.8.0

com.fasterxml.jackson.core

jackson-databind

2.6.3

com.fasterxml.jackson.core

jackson-annotations

2.6.3

io.springfox

springfox-swagger2

2.4.0

io.springfox

springfox-swagger-ui

2.4.0

2、spring-mvc.xml 中添加映射静态的配置(其实我项目中把这个去掉也可以,不知道什么情况):

注意:基本的springmvc配置我就不贴了,需要注意的是,如果你看到swagger-ui.html 界面出来,但却一片空白,请检查下你web.xml中拦截器的配置,一定要springmvc先拦截到,然后界面才会显示的。

3、然后是swagger2的配置类:

@Configuration

@EnableSwagger2

public class SwaggerConfig extends WebMvcConfigurationSupport {

@Bean

public Docket createRestApi() {

return new Docket(DocumentationType.SWAGGER_2)

.apiInfo(apiInfo())

.select()

.apis(RequestHandlerSelectors.basePackage("net.laoyeyey.yyblog"))

.paths(PathSelectors.any())

.build();

}

private ApiInfo apiInfo() {

return new ApiInfoBuilder()

.title("yyblog项目 RESTful APIs")

.description("yyblog项目api接口文档")

.version("1.0")

.build();

}

}

注意:paths如果在生产情况下可以调整为PathSelectors.none(),即不显示所有接口信息;

4、接口信息配置

即在SpringMvc的Controller中配置相关的接口信息

@Controller

@RequestMapping(value = "aitou")

@Api(description = "测试服务-账户信息查询")

public class DailyOperationDataController {

Logger logger = Logger.getLogger(DailyOperationDataController.class);

@Autowired

private DailyOperationDataService DailyOperationDataService;

/*

* @ApiOperation(value = "接口说明", httpMethod ="接口请求方式", response ="接口返回参数类型", notes ="接口发布说明"

* @ApiParam(required = "是否必须参数", name ="参数名称", value ="参数具体描述"

*/

@ApiOperation(value = "账户信息查询接口")

@RequestMapping(method ={RequestMethod.POST,RequestMethod.GET}, value="/query/dailydata/{dataDate}")

@ResponseBody

public DailyOperationDataDto getDailyReportByDataDate(@PathVariable("dataDate") String dataDate) {

try {

return DailyOperationDataService.getDailyReportByDataDate(dataDate);

} catch (Exception e) {

logger.error(e.getMessage(), e);

}

return null;

}

}

注:通常情况下swagger2会将扫描包下所有的接口展示出来,这里我是对外的接口是单独一个包,避免展示过多的接口,当然接口方法也可以让它不展示。可以在下面看到相关的注解中有写。

常用的一些注解

@Api:用在类上,说明该类的作用

@ApiOperation:用在方法上,说明方法的作用

@ApiImplicitParams:用在方法上包含一组参数说明

@ApiImplicitParam:用在 @ApiImplicitParams 注解中,指定一个请求参数的各个方面

paramType:参数放在哪个地方

· header --> 请求参数的获取:@RequestHeader

· query -->请求参数的获取:@RequestParam

· path(用于restful接口)--> 请求参数的获取:@PathVariable

· body(不常用)

· form(不常用)

name:参数名

dataType:参数类型

required:参数是否必须传

value:参数的意思

defaultValue:参数的默认值

@ApiResponses:用于表示一组响应

@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息

code:数字,例如400

message:信息,例如"请求参数没填好"

response:抛出异常的类

@ApiParam:单个参数描述

@ApiModel:描述一个Model的信息,用对象来接收参数(这种一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候)

@ApiModelProperty:描述一个model的属性

@ApiProperty:用对象接收参数时,描述对象的一个字段

@ApiIgnore:使用该注解忽略这个API

基本上就是上面这些了,是不是很easy,下面看下效果图

二、使用springboot整合swagger2

上面说了使用传统的springmvc整合swagger2,在说说最近比较流行的springboot的方式,其实原理都是一样的。

1、maven依赖

io.springfox

springfox-swagger2

2.7.0

io.springfox

springfox-swagger-ui

2.7.0

这个是我最近用springboot写的个人项目中的内用,版本用的2.7.0

2、添加静态资源配置

@Configuration

public class WebMvcConfig extends WebMvcConfigurerAdapter {/**

* 配置静态资源路径以及上传文件的路径

*

* @param registry

*/

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");

registry.addResourceHandler("/upload/**").addResourceLocations(environment.getProperty("spring.resources.static-locations"));

/*swagger-ui*/

registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");

registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");

}

}

其实就是最后两句,如果你不配置这个的话,访问swagger-ui.html会出现500,还是404的错误来着,记不清了,应该是404.

3、swagger2的配置类

和上面一样,基本上没区别

@Configuration

@EnableSwagger2

@EnableWebMvc

public class SwaggerConfig extends WebMvcConfigurationSupport {

@Bean

public Docket createRestApi() {

return new Docket(DocumentationType.SWAGGER_2)

.apiInfo(apiInfo())

.select()

.apis(RequestHandlerSelectors.basePackage("net.laoyeye.yyblog.web.frontend"))

.paths(PathSelectors.none())

.build();

}

private ApiInfo apiInfo() {

return new ApiInfoBuilder()

.title("yyblog项目 RESTful APIs")

.description("yyblog项目api接口文档")

.version("1.0")

.build();

}

}

注意,我上面有说path的问题哦,直接拷贝不显示api的,(#^.^#)

4、接口的配置

/**

* 前台文章Controller

* @author 小卖铺的老爷爷

* @date 2018年5月5日

* @website www.laoyeye.net

*/

@Api(description="文章查询")

@Controller

@RequestMapping("/article")

public class ArticleController {

@Autowired

private ArticleService articleService;

@Autowired

private SettingService settingService;

@Autowired

private CateService cateService;

@Autowired

private TagReferService tagReferService;

@Autowired

private UserService userService;

@Autowired

private ArticleMapper articleMapper;

@Autowired

private CommentService commentService;

@ApiOperation(value="文章查询接口")

@ApiImplicitParam(name = "id", value = "文章ID", required = true, dataType = "Long")

@GetMapping("/{id}")

public String index(Model model, @PathVariable("id") Long id) {

try {

articleService.updateViewsById(id);

} catch (Exception ignore) {

}

List settings = settingService.listAll();

Map map = new HashMap();

for (Setting setting : settings) {

map.put(setting.getCode(), setting.getValue());

}

Article article = articleService.getArticleById(id);

model.addAttribute("settings", map);

model.addAttribute("cateList", cateService.listAllCate());

model.addAttribute("article", article);

model.addAttribute("tags", tagReferService.listNameByArticleId(article.getId()));

model.addAttribute("author", userService.getNicknameById(article.getAuthorId()));

//回头改

model.addAttribute("articles", articleMapper.listArticleByTitle(null));

model.addAttribute("similars", articleMapper.listArticleByTitle(null));

CommentQuery query = new CommentQuery();

query.setLimit(10);

query.setPage(1);

query.setArticleId(id);

model.addAttribute("comments", commentService.listCommentByArticleId(query));

return "frontend/article";

}

@ApiOperation(value="文章评论查询接口")

@PostMapping("/comments")

@ResponseBody

public DataGridResult comments(CommentQuery query) {

//设置默认10

query.setLimit(10);

return commentService.listCommentByArticleId(query);

}

@ApiOperation(value="文章点赞接口")

@ApiImplicitParam(name = "articleId", value = "文章ID", required = true, dataType = "Long")

@PostMapping("/approve")

@ResponseBody

public YYBlogResult approve(@RequestParam Long articleId) {

return articleService.updateApproveCntById(articleId);

}

}

最后同样来个效果图,和上面一样。

PathSelectors.none()的时候

PathSelectors.any()的时候

看到效果图是不是接口内容一目了然,很简洁明了了。

最后,好像忘记说swagger文档的路径了

如果你的项目在根目录:http://localhost:8080/swagger-ui.html

如果不是根目录那就是:http://localhost:8080/你的项目名/swagger-ui.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: Java利用Swagger2自动生成对外接口的文档

本文地址: http://www.cppcns.com/ruanjian/java/231096.html



推荐阅读
  • Spring框架中的面向切面编程(AOP)技术详解
    面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • 开发笔记:深入解析Android自定义控件——Button的72种变形技巧
    开发笔记:深入解析Android自定义控件——Button的72种变形技巧 ... [详细]
  • 从零起步:使用IntelliJ IDEA搭建Spring Boot应用的详细指南
    从零起步:使用IntelliJ IDEA搭建Spring Boot应用的详细指南 ... [详细]
  • 在尝试为 Unity 编译一个简单的 Java 库时,运行 `ant jar` 命令后遇到了 Java I/O 异常。具体错误信息为“无法启动程序 ${aAPT},错误代码 2”,这通常表示指定的文件或目录不存在。此问题可能是由于环境配置不正确或路径设置有误导致的。建议检查相关路径和环境变量,确保所有依赖项都已正确安装和配置。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • Go 项目中数据库配置文件的优化与应用 ... [详细]
  • 深入解析 Android 选择器与形状绘制技术
    本文深入探讨了 Android 中选择器(Selector)与形状绘制(Shape Drawing)技术的应用与实现。重点分析了 `Selector` 的 `item` 元素,其中包括 `android:drawable` 属性的使用方法及其在不同状态下的表现。此外,还详细介绍了如何通过 XML 定义复杂的形状和渐变效果,以提升 UI 设计的灵活性和美观性。 ... [详细]
  • 如何在 IntelliJ IDEA 中高效搭建和运行 Spring Boot 项目
    本文详细介绍了如何在 IntelliJ IDEA 中高效搭建和运行 Spring Boot 项目,涵盖了项目创建、配置及常见问题的解决方案。通过本指南,开发者可以快速掌握在 IntelliJ IDEA 中进行 Spring Boot 开发的最佳实践,提高开发效率。 ... [详细]
  • 在多模块项目中,项目A作为一个独立的工具包,不依赖于任何第三方库。其目录结构如下:`--src--main--java--resources`。当将项目A打包成JAR文件后,发现无法正确访问`resources`目录下的文件资源。这一问题可能源于JAR文件的构建配置或类路径设置不当,需要仔细检查Maven或Gradle的构建脚本,确保资源文件被正确包含并加载。 ... [详细]
  • 解决基于XML配置的MyBatis在Spring整合中出现“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”问题的方法
    在将Spring与MyBatis进行整合时,作者遇到了“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”的问题。该问题主要出现在使用XML文件配置DAO层的情况下,而注解方式配置则未出现类似问题。作者详细分析了两个配置文件之间的差异,并最终找到了解决方案。本文将详细介绍问题的原因及解决方法,帮助读者避免类似问题的发生。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
author-avatar
失----
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有