springboot中使用swagger2管理测试api

用Swagger进行后端接口测试的实战操作 使用Swagger的时候,按照它的规范去定义接口以及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。Knife4j是为Java MVC框架集成Swagger生成的Api文档的增强解决方案。注解说明@Api用在类上,说明该类的作用(例如Controller来表示对类的说明)注解来给API增加方法说明(例如Controller的方法来说明方法的用途与作用)@ApiModel。 阅读详情

1.在pom中引入swagger2

    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>2.2.2</version>
    </dependency>
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>2.2.2</version>
    </dependency>

2.新建swagger2配置类

package best.yuwb.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;

/**
 * Created by venbill on 2017/5/17.
 */
@Configuration
@EnableSwagger2
public class Swagger2 {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //扫描controller所在包
                .apis(RequestHandlerSelectors.basePackage("best.yuwb.controller"))
                .paths(PathSelectors.any())
                .build();



    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Blog4g Rest API")
                .description("love coding,not only coding")
                .termsOfServiceUrl("http://yuwb.pub/")
                .contact("yuwb")
//                鱼尾巴
                .version("1.0")
                .build();
    }


}

3.controller中添加注释

package best.yuwb.controller;


import best.yuwb.model.RtInfo;
import best.yuwb.model.User;
import best.yuwb.service.EmailService;
import best.yuwb.service.UserService;
import best.yuwb.util.CookieOperaiton;
import best.yuwb.util.RandomCode;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
@Api(description = "用户操作")
@Controller
@RequestMapping("/user")
public class UserController {

    private Logger logger = Logger.getLogger(UserController.class);

    @Autowired
    private UserService userService;
    @Autowired
    private EmailService emailService;

    //注册
    @ApiOperation(value="用户注册", notes="录入有效信息,返回rtinfo")
    @RequestMapping(value = "/register", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
    @ResponseBody
    public RtInfo getUserInfo(@RequestBody User registerUser) {
        System.out.println("===>in");
        RtInfo rtInfo = new RtInfo();
        String username = registerUser.getUsername();
        String email = registerUser.getEmail();
        String password = registerUser.getPassword();
        if (StringUtils.isEmpty(username)||StringUtils.isEmpty(email)||StringUtils.isEmpty(password)){
            rtInfo.setError_code(1);
            rtInfo.setError_msg("输入不能为空!");
            return rtInfo;
        }
        //判断用户名含有非法字符 @
        if (username.contains("@")){
            rtInfo.setError_code(1);
            rtInfo.setError_msg("用户名不能含有字符@ ");
            return  rtInfo;
        }
        //判断用户名和邮箱是否被占用
        if (!userService.isNameUsed(username)){
            rtInfo.setError_code(1);
            rtInfo.setError_msg("用户名被占用,请更改用户名!");
            return rtInfo;
        }
        if (!userService.isEmailUsed(email)){
            rtInfo.setError_code(1);
            rtInfo.setError_msg("邮箱已被注册,请更改邮箱!");
            return rtInfo;
        }

        //生成激活码
        String activeCode = RandomCode.getEnCodes(20);

        //发送邮件,让用户点击
        boolean isSend = emailService.send( email,userService.getActivateContent(username,activeCode));
        if (!isSend){
            rtInfo.setError_code(1);
            rtInfo.setError_msg("邮件没有发送成功,请确认邮箱地址!");
            return rtInfo;
        }
        registerUser.setActiveCode(activeCode);

        registerUser.setActiveStatus(0);

        registerUser.setCreateTime(new Date());


        //保存到数据库
        boolean bol = userService.insertUser(registerUser);
        //返回
        if (bol){
            rtInfo.setRt_msg("注册成功!请打开邮件点击链接激活!");
        }else {
            rtInfo.setError_msg("异常错误!请重新注册!");
        }

        return rtInfo;
    }

    //激活
    @ApiOperation(value="激活账号", notes="录入有效信息,返回rtinfo")
    @RequestMapping(value = "/activateAccount", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
    @ResponseBody
    public RtInfo activateAccount(  @RequestParam(value = "username", required = false, defaultValue = "") String username,@RequestParam(value = "activeCode", required = false, defaultValue = "") String activeCode) {
        RtInfo rtInfo = new RtInfo();


        if (StringUtils.isEmpty(username)||StringUtils.isEmpty(activeCode)){
                rtInfo.setError_code(1);
                rtInfo.setRt_msg("请求参数错误,无效验证!");
                return rtInfo;
        }


        boolean bol = userService.activateAccount(username,activeCode,2);
        if (bol){
            rtInfo.setRt_msg("账户已激活!请登录!");
        }else {
            rtInfo.setError_code(1);
            rtInfo.setRt_msg("账户激活错误!请重试!");
        }
        return rtInfo;

    }

    //登录
    @ApiOperation(value="用户登录", notes="生成token,存入cookie")
    @RequestMapping(value = "/login", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
    @ResponseBody
    public RtInfo login(HttpServletResponse response, @RequestParam(value = "username", defaultValue="")String username, @RequestParam(value = "password",defaultValue = "")String password, @RequestParam(value = "savePwd")boolean savePwd){
        RtInfo rtInfo = new RtInfo();
        if (StringUtils.isEmpty(username)||StringUtils.isEmpty(password)){
            rtInfo.setError_code(1);
            rtInfo.setRt_msg("输入为空,登录无效!");
            return rtInfo;
        }

        String token = userService.login(username,password,savePwd);
        if (token.equals("")){
            CookieOperaiton.addCookie(CookieOperaiton.cookieDomain,token,savePwd?7:-1,response);
            rtInfo.setError_code(0);

            rtInfo.setRt_info("登录成功!");
        }else {
            rtInfo.setError_code(1);
            rtInfo.setError_msg("用户名或者密码错误,登录失败!");
        }

        return rtInfo;
    }



    //登出
    @ApiOperation(value="用户登出", notes="删除cookie")
    @RequestMapping(value = "/loginOut", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
    @ResponseBody
    public RtInfo loginOut(HttpServletRequest request,HttpServletResponse response){
        RtInfo rtInfo = new RtInfo();
        boolean bol = CookieOperaiton.delCookie(CookieOperaiton.cookieDomain,request,response);
        if (bol){
            rtInfo.setRt_info("登出成功!");

        }else {
            rtInfo.setError_code(1);
            rtInfo.setError_msg("登出失败!");
        }
        return rtInfo;
    }

    //找回密码
    @ApiOperation(value="找回密码", notes="发送获取密码html到邮件")
    @RequestMapping(value = "/getPassword",method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
    @ResponseBody
    public RtInfo getPassword(){
        RtInfo rtInfo = new RtInfo();


        return rtInfo;
    }



}

4.页面打开    http://localhost:8080/swagger-ui.html#/





springboot2与swagger2整合 传统的做法,我们应该会为每个系统准备一份接口文档,方便各个团队之间的交流。但是在微服务快速发展的今天,各个系统之间的交流基本都依赖于接口调用,这样就导致接口变得越来越多,开发人员在开发的同时还要维护文档,任务量加重,哀声一片,也可能会出现开发人员未及时维护文档,使得文档与接口信息不一致。 传统做法,在如今是一个不太友好的方式,为了解决上述问题,Swagger出现了。Swagger是一款可以通过注... 阅读详情

相关推荐

别再手动上传了!用宝塔面板的‘Let‘s Encrypt’免费SSL证书,3分钟自动续期

本文详细介绍了如何利用宝塔面板的‘Let‘s Encrypt’功能实现SSL证书的自动申请和续期,3分钟完成配置即可永久免费使用。通过对比不同SSL证书方案,突出Let's Encrypt的免费、自动续期和高安全性优势,特别适合个人博客和中小企业官网。

weixin_30415113的博客 150

JAVA后端使用 Swagger2 进行接口测试(springfox-swagger2 3.0.0版本)

本文参加http://www.imooc.com/wiki/springbootlesson/swagger2.html进行编写,这个链接非常适合初学者,言简意赅,通俗易懂。美中不足的是某些依赖版本比较低,如果我们用的版本比较高的话,写法有变,初学者可能会花比较多时间。由于我使用的springfox-swagger2 版本3.0.0过高而引起的错误,在此记录一下 1.Spring Boot 中使用 Swagger2 流程 2.在配置文件中引入 Swagger2 相关依赖 <!-- 添加sw

zaq977684的博客 1983

博途AI助手演示,完成简单且重复的梯形图代码,并导入到博途

自写个博途AI助手,下面演示AI帮我生成完善多个模拟量输入转换的代码,

gsjkwg的博客 1527

swagger测试Restful API

swagger出现背景 我们构建Restful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端,不同端由不同的团队或者小组负责,为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份Restful API文档来记录所有接口细节,但是,由于接口多且复杂,这样的做法是很难执行的,且效果差。 而Swagg...

全栈测试笔记 1031

自定义载板RK3588HDMI输入配置完整解决方案

✅ HDMI输入信号检测✅ 自动时序识别(支持1080p@60Hz等标准格式)✅ V4L2视频设备接口✅ 实时视频流捕获✅ H.264编码录制✅ HDCP内容保护支持问题根因识别:发现了hdmim1模块资源冲突的本质问题硬件设计理解:明确了Orange Pi 5 Plus的真实硬件设计意图功能实现:成功启用HDMI输入功能,替代了无法使用的HDMI1输出完整验证:建立了从硬件检测到视频录制的完整测试流程。

梁俊星的博客 1271

openwrt 固件定制详解:各类默认参数修改及应用添加

本文以friendlywrt22-rk3568发行版为例, 介绍如**何定制**一款**openwrt固件**,定制特性包括网络参数、登陆密码、开机界面(banner)、代理arp、opkg源、hostname、应用默认配置参数修改、增加任意文件(不限于应用程序及其库)等, 最后给出了一个完整的实操实例。

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 1544

Swagger学习(二)之SpringBoot集成Swagger2

SpringBoot集成Swagger2

weixin_53998054的博客 1105

OTG原理讲解

摘要:USB OTG(On-The-Go)是USB 2.0的重要功能,允许设备在主机和从机间动态切换,实现设备间的直接通信。其核心机制是通过ID引脚电平判断角色:Micro-USB中接地为Host,悬空为Device;USB-C则通过CC引脚协商。电路设计需处理ID引脚连接和VBUS电源控制,MCU根据ID状态配置USB控制器模式。典型应用包括手机连接U盘、键盘等外设,极大扩展了移动设备的连接能力。

m0_49476241的博客 3222

springboot 中配置Swagger2

1.引入依赖 <!--swagger2 依赖--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> ...

Ark方舟 1052

【项目实战】AES实施应符合NIST密码算法验证程序

AES由美国国家标准与技术研究院(NIST)制定。NIST是负责开发和维护美国政府使用的技术标准的机构,包括加密标准。

奶爸的编程之路,也就一周冷个三天 766

YOLO26优化:特征融合 | 一种新颖的多尺度特征融合iAFF,适配小目标检测

在YOLO26中如何使用:iAFF加入Neck替代Concat;

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 270

基于SpringBoot2开发WebApi(三)集成Swagger2

1.依赖 在pom.xml添加Swagger2依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency>

谁念西风独自凉 2167

Arduino 系列:Arduino Due 系列 (基于 ATSAM3X8E)_(5).电源管理与电压调节

电源管理与电压调节是确保嵌入式系统稳定性和可靠性的关键环节。通过合理选择电源输入方式、使用高效的电压调节器、设计适当的滤波电路和实施动态电源管理,可以有效提高系统的性能和寿命。同时,使用电源调试工具和编写调试代码,可以帮助开发者及时发现和解决问题。希望本文档能为使用 Arduino Due 的开发者提供有用的信息和指导。

2401_87715305的博客 1309

SpringBoot集成Swagger

1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4

luo381821的博客 126

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SpringBoot中使用Swagger2构建强大的RESTful API文档

由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API。而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端。 这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发、Androi...

Jacians' Blog 187

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SpringBoot整合Swagger2

一、Swagger2概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口。这些接口不但会服务于传统的web端(b/s),也会服务于移动端。在实际开发过程中,这些接口还要提供给开发测试进行相关的白盒测试,那么势必存在如何在多人协作中共享和及时更新API开发接口文档的问题。 假如你已经对传统的wiki文档共享方式所带来的弊端深恶痛绝,那么尝试一下Swagger2 方式,一定会让你有不一样的开发体验。 使用 Swagge.

JavadeSon的博客 242

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Springboot集成Swagger实战

1.介绍 本文将通过实战介绍Springboot如何集成swagger2,以用户管理模块为例,实现项目接口文档的在线管理。 本文只列出核心部分,详细请看源码: https://gitee.com/indexman/boot_swagger_demo 2.Swagger是干什么的? Swagger 是一个用于生成、描述和调用 RESTful 接口的 Web 服务。通俗的来讲,Swagger 就是将项目中所有(想要暴露的)接口展现在页面上,并且可以进行接口调用和测试的服务。 官网地址:https://swagg

老徐的博客只有干货 394

Spring Boot中使用Swagger2构建强大的RESTful API文档

本文由程序猿DD-翟永超创作,采用CC BY 3.0 CN协议进行许可,转自:http://blog.didispace.com/springbootswagger2/ 1.相关介绍及配置 由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API。而我们构建RESTful API的目的通常都是由于多终端的原因,...

样young的博客 329

springboot系列教程(二十一):springboot整合Swagger2接口管理

springboot系列教程(二十一):springboot整合Swagger2接口管理

weixin_43860634的博客 426

SpringBoot 整合 Swagger2及其常用注解

Swagger2是什么? 它是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。 第一步、导入依赖包 <!--SpringBoot 整合 Swagger接口依赖--> <depende

qq_45572205的博客 369

Swagger2

pom.xml: <!--swagger--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <v...

qq_15199097的博客 508

springboot + swagger 整合

话不多说 实现 丝袜哥的接口分为三步(把大象装进冰箱总共分几步?): 1.添加依赖 2.配置类 3.controller 加配置 1.maven依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId&g...

hgdzw的博客 139

新增数据接口_Springboot swagger2 api接口文档使用

导读当你在使用springboot开发微服务的时候,你是如何把定义的接口信息告诉给调用方的呢?如:接口地址,接口参数,参数类型,参数说明,返回响应对象等信息说明,或许你可以用word文档来编辑接口信息,然后转给调用方,或者第三方api管理工具,但是这些都给你的工作增加了额外的负担,因此,我们要使用springboot整合swagger2来实现这个api接口文档编辑管理。新建springboot-s...

weixin_28778341的博客 445

SpringBoot(七):SpringBoot整合Swagger2

原文地址:https://blog.youkuaiyun.com/saytime/article/details/74937664 手写Api文档的几个痛点: 文档需要更新的时候,需要再次发送一份给前端,也就是文档更新交流不及时。 接口返回结果不明确 不能直接在线测试接口,通常需要使用工具,比如postman 接口文档太多,不好管理 Swagger也就是为了解决这个问题,当然也...

dianhuang8011的博客 120

swagger使用和教程

由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API。而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端。 这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发、Androi...

青春季风暴 6万+
上一篇: solr add documents
下一篇: solr6使用ansj做中文分词
programmeryu
博客等级 码龄11年 23粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值