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 ...
随机推荐
- Java引用的四种状态
强引用 用的最广,我们平时写代码时,new一个Object存放在堆内存,然后用一个引用指向它.它就是强引用. 如果一个对象具有强引用,那么垃圾回收期绝不会回收它,当内存空间不足,java虚拟机宁愿抛出 ...
- C#中IQueryable和IEnumerable的区别
最近的一个面试中,被问到IQueryable 和 IEnumerable的区别, 我自己看了一些文章,总结如下: 1. 要明白一点,IQueryable接口是继承自IEnumerable的接口的. 2 ...
- 13.Weblogic任意文件上传漏洞(CVE-2018-2894)复现
Weblogic任意文件上传漏洞(CVE-2018-2894)复现 漏洞背景 WebLogic管理端未授权的两个页面存在任意上传getshell漏洞,可直接获取权限.两个页面分别为/ws_utc/be ...
- unity3d AssetStore 下载的资源位置
Win7,8和Win10系统下: 进入C:\Users\“用户名”目录,然后打开文件夹选项的显示隐藏文件选项 再进入AppData\Roaming\Unity/Asset Store-5.x下找到 M ...
- 洛谷P1164 小A点菜(01背包求方案数)
P1164 小A点菜 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过u ...
- Unity 动画系统目录
引言 提到动画,你想到的是什么? 图片在循环播放构成的动画.UI物体的循环变色.2D 3D物体在循环运动.链条弹簧的运动.3D的玩家在行走奔跑挥剑.非人形的运动... 动画实现方式的分类 动画实现的方 ...
- Django基础(1)
昨日内容回顾: 1. socket创建服务器 2. http协议: 请求协议 请求首行 请求方式 url?a=1&b=2 协议 请求头 key:value 请求体 a=1&b=2(只有 ...
- MD5Utils
import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import com.yundae ...
- P1681 最大正方形 Iand II
题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...
- Unity C# 脚本的单例
今天学习了一个比较不错的单例模式 public class UnitySigleton <T>: MonoBehaviour where T:class { public static T ...