1 swagger简单案例

 1.1 加入依赖

<!--swagger图形化接口--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version>
</dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version>
</dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>1.8.7</version>
</dependency>

1.2 在config包中写swagger配置类SwaggerConfig

        swagger配置类的代码如下:(直接套用,但部分需要修改)

package com.ieslab.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket docket(Environment environment){// 设置要现实的swagger环境Profiles profiles = Profiles.of("dev","test");// 获取项目的环境,如果项目环境在profiles中则返回trueboolean flag = environment.acceptsProfiles(profiles);return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())  //配置 Swagger ApiInfo 基本信息.groupName("jiangzeyu").enable(flag)  //配置是否启动swagger.select()//RequestHandlerSelector配置要扫描接口的方式//basePackage:指定要扫描的包.apis(RequestHandlerSelectors.basePackage("com.ieslab.demo.controller"))/** paths():只扫描哪些类* any()代表扫描全部* none()代表都不扫描* withClassAnnotation:扫描类上有某个注解的接口,比如说RestController就是扫描类上有@RestController的类生成接口* withMethodAnnotation:扫描方法上有某个注解的接口,比如说GetMapping就是扫描方法上有@GetMapping的类生成接口* ant(“/hello/*”):扫描包含/hello/**请求的类生成接口*/.paths(PathSelectors.any()).build();  //工厂模式}@Beanpublic Docket docket1(){return new Docket(DocumentationType.SWAGGER_2).groupName("A").enable(true);}@Beanpublic Docket docket2(){return new Docket(DocumentationType.SWAGGER_2).groupName("B").enable(true);}//配置 Swagger信息=apiInfoprivate ApiInfo apiInfo(){//作者信息Contact contact = new Contact("zhangsan","无","333@qq.com");return new ApiInfo("Swagger API 文档",                    //文档标题"这个是一个 Swagger 接口文档。",              //文档描述"v1.0",                                       //文档版本"没有网站",                   //队伍的网站地址contact,                                              //作者信息"Apache 2.0",                                  //许可证"http://www.apache.org/licenses/LICENSE-2.0",//许可证Urlnew ArrayList());}}

剖析: 

         在类上要加入两个注解:@Configuration和@EnableSwagger2;

        然后开始写docket方法,返回Docket对象,入参是Environment environment,用来后续对application的环境进行判断,控制swagger是否启动:

// 设置要现实的swagger环境,dev代表application-dev.yaml
Profiles profiles = Profiles.of("dev","test");
// 获取项目的环境,如果项目环境在profiles中则返回true
boolean flag = environment.acceptsProfiles(profiles);

        接着,返回配置的Docket对象:

return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())  // 配置 Swagger ApiInfo 基本信息,因此要创建apiInfo方法.groupName("jiangzeyu")   .enable(flag)  //配置是否启动swagger.select()//RequestHandlerSelector配置要扫描接口的方式//basePackage:指定要扫描的包.apis(RequestHandlerSelectors.basePackage("com.ieslab.demo.controller"))/** paths():只扫描哪些类,()里的参数有any()、none()、ant(“需要扫描的请求”)、withClassAnnotation、withMethodAnnotation,后面两个不常用,请自行百度* any()代表扫描全部* none()代表都不扫描* withClassAnnotation:扫描类上有某个注解的接口,比如说RestController就是扫描类上有@RestController的类生成接口* withMethodAnnotation:扫描方法上有某个注解的接口,比如说GetMapping就是扫描方法上有@GetMapping的类生成接口* ant(“/hello/*”):扫描包含/hello/**请求的类生成接口*/.paths(PathSelectors.any()).build();  //工厂模式}

        其中,apiInfo传入apiInfo方法返回的ApiInfo对象(需要自己写apiInfo方法),enable传入的参数可由项目的环境决定,apis(RequestHandlerSelectors.basePackage())传入的是需要扫描的包路径,paths()传入的是在包路径下扫描哪些类,groupName() 传入的是测试接口归属哪个人,如下图所示:

        多个docket方法就可以代表不同人的测试接口:(注意方法名不要相同!)

    @Beanpublic Docket docket1(){return new Docket(DocumentationType.SWAGGER_2).groupName("A").enable(true);}@Beanpublic Docket docket2(){return new Docket(DocumentationType.SWAGGER_2).groupName("B").enable(true);}

        效果:

        apiInfo()方法如下:套模板即可。 

    //配置 Swagger信息=apiInfoprivate ApiInfo apiInfo(){//作者信息Contact contact = new Contact("zhangsan","无","333@qq.com");return new ApiInfo("Swagger API 文档",                    //文档标题"这个是一个 Swagger 接口文档。",              //文档描述"v1.0",                                       //文档版本"没有网站",                   //队伍的网站地址contact,                                              //作者信息"Apache 2.0",                                  //许可证"http://www.apache.org/licenses/LICENSE-2.0",//许可证Urlnew ArrayList());}

1.3 创建实体类User

package com.ieslab.demo.emtity;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("这是User的实体类") // 给实体类加文档注释
public class User {@ApiModelProperty("主键id")private Integer userId;@ApiModelProperty("用户名")private String username;@ApiModelProperty("密码")private String password;}

        剖析:只要实体类在Controller被使用,而控制类又被swagger扫描到,就会被展示出来,实体类的注解都是给文档加注释用的。

1.4 创建UserDao接口和UserDaoImpl实现类

        UserDao:

package com.ieslab.demo.dao;import com.ieslab.demo.emtity.User;public interface UserDao {// 添加用户User addUser(Integer userId,String userName,String password);}

        UserDaoImpl:因为前端传来的是一个JSON对象,会使用@RequestBody将其封装为User对象,然后从这个User对象中拿各个属性。

package com.ieslab.demo.dao.impl;import com.ieslab.demo.dao.UserDao;
import com.ieslab.demo.emtity.User;
import org.springframework.stereotype.Repository;import java.util.HashMap;
import java.util.Map;@Repository
public class UserDaoImpl implements UserDao {private static Map<Integer,User> userMap = null;static {userMap = new HashMap<Integer, User>();userMap.put(100,new User(100,"zhangsan","777"));userMap.put(102,new User(102,"lisi","888"));userMap.put(103,new User(103,"wangwu","999"));userMap.put(104,new User(104,"zhaoliu","000"));}@Overridepublic User addUser(Integer userId,String userName,String password) {User user = new User(userId,userName,password);userMap.put(user.getUserId(),user);return user;}}

1.5 创建Controller对象,接收请求

package com.ieslab.demo.controller;
import com.ieslab.demo.dao.UserDao;
import com.ieslab.demo.emtity.User;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestController
public class MyController {@Autowired // 相当于使用new UserDaoimpl()private UserDao userDao;@PostMapping(value = "/addUser")@ApiOperation(value = "AddUser接口",httpMethod = "POST",notes = "这是AddUser接口的详细说明") // 给方法加注释public User addUser(@RequestBody @ApiParam("用户") User userInput){  // 加入@RequestBody Spring自动将传过来的JSON类型的数据和我们的类匹配,说明输入是JSON格式的数据User user = userDao.addUser(userInput.getUserId(), userInput.getUsername(), userInput.getPassword());return user;}}

        剖析:

        重点在于Post方法不能接收基本类型的数据,需要把它们用JSON格式进行封装,然后@RequestBody会把JSON格式的数据转为对应的实体类。

        注意!类上的是@RestController而不是@Controller,因为@Controller后类中的方法return的要转发的页面,而不会被以指定的格式写入Http response body中。

        其他大部分注解都是加注释用的:

 1.6 使用swagger进行测试

        访问:http://localhost:8080/swagger-ui.html

        然后选择自己的组,点击控制类: 

        点击要测试的接口(方法):

         点击try it out开始测试:

         编辑要传入的JSON数据,编辑后执行:

         测试成功:

 

         

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/56663.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DSP学习笔记

一个汇编语句包含4个固定顺序的区域&#xff1a;标号&#xff08;必须从第一列开始 不能空格&#xff0c;后面可以有&#xff1a;也可以没有&#xff09; 助记符 操作数 注释&#xff08;用分号或者星号来注释&#xff09;伪指令用.开头&#xff0c;注释可以用第一列开始写&…

【从零开始学习JAVA | 第四十一篇】深入JAVA锁机制

目录 前言&#xff1a; 引入&#xff1a; 锁机制&#xff1a; CAS算法&#xff1a; 乐观锁与悲观锁&#xff1a; 总结&#xff1a; 前言&#xff1a; 在多线程编程中&#xff0c;线程之间的协作和资源共享是一个重要的话题。当多个线程同时操作共享数…

基于Windows手动编译openssl和直接安装openssl

零、环境 win10-64位 VS2019 一、手动编译 前言&#xff1a;对于一般的开发人员而言&#xff0c;在 openssl 上下载已经编译好的 openssl 库&#xff0c;然后直接拿去用即可&#xff0c;&#xff0c;不用手动编译&#xff0c;{见下文直接安装}。。。对于一些开发人员&#…

[webpack] 处理样式 (二)

文章目录 1.介绍2.处理 Css 资源2.1 导入包2.2 功能配置2.3 添加 Css 资源 3.处理 Less 资源3.1 导入包3.2 功能配置3.3 添加 Less 资源 4.处理 Sass 和 Scss 资源4.1 导入包4.2 配置4.3 添加 Sass 资源4.4 运行webpack 5.处理 Styl 资源5.1 导入包5.2 配置5.3 添加 Styl 资源5…

Qt--动态链接库的创建和使用

写在前面 在Qt的实际开发中&#xff0c;免不了使用和创建动态链接库&#xff0c;因此熟悉Qt中动态链接库的创建和使用对后续的库开发或使用是非常用必要的。 在之前的文章https://blog.csdn.net/SNAKEpc12138/article/details/126189926?spm1001.2014.3001.5501中已经对导入…

机器学习笔记之优化算法(八)简单认识Wolfe Condition的收敛性证明

机器学习笔记之优化算法——简单认识Wolfe Condition收敛性证明 引言回顾&#xff1a; Wolfe \text{Wolfe} Wolfe准则准备工作推导条件介绍推导结论介绍 关于 Wolfe \text{Wolfe} Wolfe准则收敛性证明的推导过程 引言 上一节介绍了非精确搜索方法—— Wolfe \text{Wolfe} Wolf…

快速修复应用程序中的问题的利器—— Android热修复

热修复技术在Android开发中扮演着重要的角色&#xff0c;它可以帮助开发者在不需要重新发布应用程序的情况下修复已经上线的应用程序中的bug或者添加新的功能。 一、热修复是什么&#xff1f; 热修复&#xff08;HotFix&#xff09;是一种在运行时修复应用程序中的问题的技术…

前端js--旋转幻灯片

效果图 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><link rel"stylesheet" href"…

上位机是什么?有什么实际用途?

上位机是指控制、监测或管理下位机的计算机系统&#xff0c;也可以称为主机。它通常用于工业自动化、机器人控制、数据采集和处理等领域。在工业自动化中&#xff0c;上位机负责向下位机下发指令并获取反馈信息&#xff0c;以控制生产流程。在机器人控制中&#xff0c;上位机负…

ubuntu服务器配置ftp服务

需求&#xff1a;配置ftp服务用于在windows电脑上直接浏览、下载、上传ubuntu服务器上的文件&#xff0c;用于文件共享&#xff0c;方便实用 效果&#xff1a;用户打开windows资源管理器后输入ftp://xxx.xxx.xxx.xxx &#xff08;公网IP地址&#xff09;后&#xff0c;即可浏览…

带你了解—使用Ubuntu系统,公网环境下SSH远程树莓派

公网环境下Ubuntu系统SSH远程树莓派 文章目录 公网环境下Ubuntu系统SSH远程树莓派前言 1. 安装cpolar客户端2. 安装完成后输入指令3. ubuntu系统输入命令 前言 树莓派作为低功耗、小型化的硬件设备&#xff0c;其功能和运算能力并未过度缩水&#xff0c;在不少场景中&#xff…

vscode中无法使用git解决方案

1 首先查看git安装目录 where git 2 找到bash.exe 的路径 比如&#xff1a;C:/Users/Wangzd/AppData/Local/Programs/Git/bin/bash 3 找到vscode的配置项setting.json 4 添加 "terminal.integrated.shell.windowns": "C:/Users/Wangzd/AppData/Local/Pr…