Spring Boot : Swagger 2
每次修改完代码需要找原本的API时楼主的内心是痛苦的,因为一般情况下都找不到,需要重新写一份。如果使用Swagger的话,只要加几个注解就可以实时生成最新的在线API文档,而且不仅仅是文档,同时支持API接口的测试。下面呢,给大家分享一下Spring Boot 集成 Swagger 的步骤。
一、引入jar包
<!-- Swagger2核心包-->
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency> <!-- Swagger2 UI包,前端展示API文档 -->
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
二、配置SwaggerConfig
package com.bjgoodwill.oip.major.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; /**
* @Description: swagger配置文件
* @Date 2018/7/13 10:50
* @Author HQueen
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.queeen.major"))
.paths(PathSelectors.any())
.build();
} private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("API文档")
.build();
}
}
其中,@EnableSwagger2注解来启用Swagger2,apis()定义了扫描的包路径
三、编写接口
Spring Boot中包含了一些注解,对应于HTTP协议中的方法:
@GetMapping对应HTTP中的GET方法;
@PostMapping对应HTTP中的POST方法;
@PutMapping对应HTTP中的PUT方法;
@DeleteMapping对应HTTP中的DELETE方法;
@PatchMapping对应HTTP中的PATCH方法。
package com.bjgoodwill.oip.major.system.controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import com.bjgoodwill.oip.core.enums.ExceptionEnum;
import com.bjgoodwill.oip.core.exception.CoreException;
import com.bjgoodwill.oip.core.util.StringUtils;
import com.bjgoodwill.oip.major.system.model.UserModel;
import com.bjgoodwill.oip.major.system.service.UserService;
import com.bjgoodwill.oip.major.system.util.R; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; /**
* @Date 2018/7/13 10:50
* @Author HQueen
*/
@Controller
@RequestMapping(value="/user")
@Api(tags="用户信息")
public class UserController { @Autowired
UserService userService; /** 验证用户信息
* @param account
* @return
*/
@ApiOperation(value="验证用户信息", notes="验证用户信息")
@PostMapping(value="/verify")
@ResponseBody
public UserModel verifyUser(@ApiParam(name="account", value="用户名") String account){ if (StringUtils.isEmpty(account)) {
throw new CoreException(ExceptionEnum.REQUEST_NULL);
} UserModel model = userService.findByAccount(account); return model;
} /** 跳转至用户修护界面
* @param id
* @param model
* @return
*/
@ApiOperation(value="跳转至用户修护界面", notes="跳转至用户修护界面")
@GetMapping(value="/pre/{id}")
public String preUpdate(@ApiParam(name="id", value="用户ID") Long id, Model model) { UserModel userModel = userService.getByPrimaryKey(id); model.addAttribute("model", userModel); return "edit";
} /** 修改用户基本信息
* @param userModel
* @return
*/
@ApiOperation(value="修改用户基本信息", notes="修改用户基本信息")
@PostMapping(value="/update")
@ResponseBody
public R update(@ApiParam(name="userModel", value="用户信息类") UserModel userModel) { if (userService.update(userModel) > 0) {
return R.ok();
} return R.error();
}
}
四、启动及测试


如上图所示,点击 Try it out! 就可以进行在线测试。
PS:
1. swagger和swagger 2的区别
在官方文档上是这么说明的:
What is the relationship between swagger-ui and springfox-swagger-ui?
- Swagger Spec is a specification.
- Swagger Api - an implementation of that specification that supports jax-rs, restlet, jersey etc.
- Springfox libraries in general - another implementation of the specification focused on the spring based ecosystem.
- Swagger.js and Swagger-ui - are client libraries in javascript that can consume swagger specification.
- springfox-swagger-ui - the one that you’re referring to, is just packaging swagger-ui in a convenient way so that spring services can serve it up.
总的来说就是:
1. Swagger 是一种规范。
2. springfox-swagger 是基于 Spring 生态系统的该规范的实现。
3. springfox-swagger-ui 是对 swagger-ui 的封装,使得其可以使用 Spring 的服务
2. 其他注解方式
在上述 demo 中,楼主使用@ApiParam注解对参数进行描述,下面呢,楼主提供第二种注解方式。
package com.bjgoodwill.oip.major.system.controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import com.bjgoodwill.oip.core.enums.ExceptionEnum;
import com.bjgoodwill.oip.core.exception.CoreException;
import com.bjgoodwill.oip.core.util.StringUtils;
import com.bjgoodwill.oip.major.system.model.UserModel;
import com.bjgoodwill.oip.major.system.service.UserService;
import com.bjgoodwill.oip.major.system.util.R; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; /**
* @Date 2018/7/13 10:50
* @Author HQueen
*/
@Controller
@RequestMapping(value="/user")
@Api(tags="用户信息")
public class UserController { @Autowired
UserService userService; /** 验证用户信息
* @param account
* @return
*/
@ApiOperation(value="验证用户信息", notes="验证用户信息")
@PostMapping(value="/verify")
@ApiImplicitParams({
@ApiImplicitParam(name="account", value="用户名", required=true, paramType="query", dataType="String")
})
@ResponseBody
public UserModel verifyUser(String account){ if (StringUtils.isEmpty(account)) {
throw new CoreException(ExceptionEnum.REQUEST_NULL);
} UserModel model = userService.findByAccount(account); return model;
} /** 跳转至用户修护界面
* @param id
* @param model
* @return
*/
@ApiOperation(value="跳转至用户修护界面", notes="跳转至用户修护界面")
@GetMapping(value="/pre/{id}")
@ApiImplicitParams({
@ApiImplicitParam(name="id", value="用户ID", required=true, paramType="path", dataType="Long")
})
public String preUpdate(Long id, Model model) { UserModel userModel = userService.getByPrimaryKey(id); model.addAttribute("model", userModel); return "edit";
} /** 修改用户基本信息
* @param userModel
* @return
*/
@ApiOperation(value="修改用户基本信息", notes="修改用户基本信息")
@PostMapping(value="/update")
@ResponseBody
public R update(@RequestBody @ApiParam(name="userModel", value="用户信息类") UserModel userModel) { if (userService.update(userModel) > 0) {
return R.ok();
} return R.error();
}
}
Spring Boot : Swagger 2的更多相关文章
- spring boot + swagger + mysql + maven
1.首先编写 yaml 文件,创建项目所需的接口,在swagger.io官网上生成 spring boot项目: 2.由于生成的spring boot项目是公共类的所以还需要修改成所需的项目名称,主要 ...
- spring boot Swagger 集成
1. pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww ...
- Spring Boot + Swagger
前言: 在互联网公司, 微服务的使用者一般分为两种, 客户端和其他后端项目(包括关联微服务),不管是那方对外提供文档 让别人理解接口 都是必不可少的.传统项目中一般使用wiki或者文档, 修改繁琐,调 ...
- Spring Boot --- Swagger基本使用
1. pom <!-- swagger2 --> <dependency> <groupId>io.springfox</groupId> <ar ...
- Spring Boot 集成Swagger
Spring Boot 集成Swagger - 小单的博客专栏 - CSDN博客https://blog.csdn.net/catoop/article/details/50668896 Spring ...
- Spring Boot项目简单上手+swagger配置+项目发布(可能是史上最详细的)
Spring Boot项目简单上手+swagger配置 1.项目实践 项目结构图 项目整体分为四部分:1.source code 2.sql-mapper 3.application.properti ...
- HTTP RESTful服务开发 spring boot+Maven +Swagger
这周配合第三方平台整合系统,需要提供HTTP REST服务和使用ActiveMQ推送消息,研究了下,做个笔记. 1.使用eclipse创建Spring Boot项目 创建Spring Boot项目( ...
- spring boot swagger-ui.html 404
很奇怪的问题,找了好久. 因为spring boot+swagger实现起来很简单.看下面三部曲: 1.pom添加两个swagger依赖. <!-- Swagger依赖包 --> < ...
- Spring boot中使用springfox来生成Swagger Specification小结
Rest接口对应Swagger Specification路径获取办法: 根据location的值获取api json描述文件 也许有同学会问,为什么搞的这么麻烦,api json描述文件不就是h ...
随机推荐
- 11. CTF综合靶机渗透(四)
运行环境 Virtualbox (二选一) Vnware Workstation player 通关提示 Enumeration is key Try Harder Look in front of ...
- Head First HTML与CSS(第2版) 中文pdf扫描版
是不是已经厌倦了那些深奥的HTML书?你可能在抱怨,只有成为专家之后才能读懂那些书.那么,找一本新修订的<Head First HTML与CSS(第2版)>吧,来真正学习HTML.你可能希 ...
- C#将PDF转换为图片的方法
1.需要添加引用 O2S.Components.PDFRender4NET 链接: https://pan.baidu.com/s/1ZPTaLTnFkex6QrsndLjwxg 提取码: jdh2 ...
- c# 一维数组的声明方式
1.直接指定数组元素 int [] arr = {2,4,1,8,4}; 2.只指定数组长度不指定元素值 指定一个长度为5的int型数组 int [] arr = new int[5]; 3.不指定 ...
- SCUT - 321 - Tobby's magic - 线段树
https://scut.online/p/321 第一次做区间线段树. 感觉和单点的一样啊.pushdown的时候要注意一些问题,st的值有可能是跟区间长度有关的. #include<bits ...
- nginx 服务器并发优化
apache 提供的 ab 可以对服务器进行压力测试, 安装 ab: apt-get install apache2-utils 安装完后,ab 在目录 /usr/bin/ 下的. 执行: ab ...
- 51nod1138(连续和)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1138 题意:中文题诶- 思路:假设 x=a1+(a1+1)+ ...
- 洛谷P1607 [USACO09FEB]庙会班车Fair Shuttle
P1607 [USACO09FEB]庙会班车Fair Shuttle 题目描述 Although Farmer John has no problems walking around the fair ...
- jsp内置对象request的使用方法
<%@page import="java.text.SimpleDateFormat"%> <%@page import="java.util.Date ...
- Intervals POJ - 1201 差分约束
You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. Write a program that: ...