springMvc+swagger整合例子

cq-jiang 2018-02-21 原文

springMvc+swagger整合例子

  Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API与接口方法,参数等保存同步,大大减少了接口开发人员的工作量.这个例子是我本地运行正常的,完整demo在文章最后。

  第一步:在pom.xml引入相关jar 

<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.4.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.4.0</version>
        </dependency>
        
        <dependency>  
            <groupId>com.fasterxml.jackson.core</groupId>  
            <artifactId>jackson-core</artifactId>  
            <version>2.8.0</version>  
        </dependency>  
        <dependency>  
            <groupId>com.fasterxml.jackson.core</groupId>  
            <artifactId>jackson-databind</artifactId>  
            <version>2.6.3</version>  
        </dependency>  
        <dependency>  
            <groupId>com.fasterxml.jackson.core</groupId>  
            <artifactId>jackson-annotations</artifactId>  
            <version>2.6.3</version>  
        </dependency>  

  第二步:配置spring-servlet.xml

<!-- 激活@controller模式 -->
    <mvc:annotation-driven />
    <!-- 配置包扫描位置(会在此包下扫描@controller控制器) -->
    <context:component-scan base-package="com.scan,com.bean" />
<!--  swagger静态文件路径 -->
<mvc:resources mapping="/swagger/**" location="/WEB-INF/swagger/" cache-period="31556926"/>
    <mvc:default-servlet-handler />
    <bean class="com.scan.config.SwaggerConfig" /> 

  第三步:编写SwaggerConfig

    

package com.scan.config;
   
import com.google.common.base.Predicate;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; 

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.List;

import static com.google.common.base.Predicates.or;
import static com.google.common.collect.Lists.newArrayList; 
 
@Configuration
@EnableSwagger2
@ComponentScan(basePackages = {"com.scan.controller"})   
@EnableWebMvc
public class SwaggerConfig extends WebMvcConfigurationSupport {

    @Bean
    public Docket customDocket() {
        //
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        Contact contact = new Contact("老王", "https://www.baidu.me", "baidu_666@icloud.com");
        return new ApiInfo("Blog前台API接口",//大标题 title
                "Swagger测试demo",//小标题
                "0.0.1",//版本
                "www.baidu.com",//termsOfServiceUrl
                contact,//作者
                "Blog",//链接显示文字
                "https://www.baidu.me"//网站链接
        );
    }
    
      
}

  第四步:控制层的配置

  

@Controller
@RequestMapping("/userController")
@Api(tags = "二:用户信息") //swagger分类标题注解
public class UserController {

    @RequestMapping(value = "/listCompound", method = RequestMethod.GET)
    @ResponseBody
  //swagger返回值注解 @ApiResponses(value
= { @ApiResponse(code = 500, message = "系统错误"), @ApiResponse(code = 200, message = "0 成功,其它为错误,返回格式:{code:0,data[{}]},data中的属性参照下方Model", response = UserVo.class) }) @ApiOperation(httpMethod = "GET", value = "个人信息")//swagger 当前接口注解 public String listCompound( @ApiParam(required = true, name = "start", value = "start") int start, int limit, @ApiParam(required = false, name = "userName", value = "名称模糊查询") String userName) { List<UserVo> data = new ArrayList<UserVo>(); String msg = data.size() > 0 ? "" : "没有查询到相关记录"; Result result = new Result(); result.setMsg(msg); result.setCode(0); result.setData(data); return JSONObject.toJSONString(result); }

  第五步:下载swaggerUi,将下载后的文件解压,将dist目录下的文件,复制到webapp下的swagger目录中(这个目录的名字自定义,但要和spring-servert.xml中(<mvc:resources mapping=”/swagger/**” location=”/WEB-INF/swagger/”) 的名称要一致,修改index.html中文档加载的地址.

window.onload = function() {
  
  // Build a system
  const ui = SwaggerUIBundle({
    //url: "http://petstore.swagger.io/v2/swagger.json",
    url:"http://127.0.0.1:8080/swagger-spring/v2/api-docs.do",
    dom_id: '#swagger-ui',
    deepLinking: true,
    presets: [
      SwaggerUIBundle.presets.apis,
      SwaggerUIStandalonePreset
    ],
    plugins: [
      SwaggerUIBundle.plugins.DownloadUrl
    ],
    layout: "StandaloneLayout"
  })

  如果以上配置正确,在浏览器中输入http://127.0.0.1:8080/swagger-spring/swagger/index.html,将会出现如下界面:

  

 

 swagger注解说明

    1、与模型相关的注解,用在bean上面

    @ApiModel:用在bean上,对模型类做注释;

    @ApiModelProperty:用在属性上,对属性做注释

  2、与接口相关的注解

    @Api:用在controller上,对controller进行注释;

    @ApiOperation:用在API方法上,对该API做注释,说明API的作用;

    @ApiImplicitParams:用来包含API的一组参数注解,可以简单的理解为参数注解的集合声明; 

    @ApiImplicitParam:用在@ApiImplicitParams注解中,也可以单独使用,说明一个请求参数的各个方面,该注解包含的常用选项有:

      paramType:参数所放置的地方,包含query、header、path、body以及form,最常用的是前四个。

      name:参数名;

      dataType:参数类型,可以是基础数据类型,也可以是一个class;

      required:参数是否必须传;

      value:参数的注释,说明参数的意义;

      defaultValue:参数的默认值;

    

    @ApiResponses:通常用来包含接口的一组响应注解,可以简单的理解为响应注解的集合声明;

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

      code:即httpCode,例如400 

      message:信息,例如”操作成功”

      response = UserVo.class  这里UserVo是一个配置了@ApiModel注解的对像,该是对像属性已配置 @ApiModelProperty,swagger可以通过这些配置,生 成接口返回值

  

  注意事项:
  1. 为了在swagger-ui上看到输出,至少需要两个注解:@Api和@ApiOperation
  2. 即使只有一个@ApiResponse,也需要使用@ApiResponses包住
  3. 对于@ApiImplicitParam的paramType:query、form域中的值需要使用@RequestParam获取, header域中的值需要使用@RequestHeader来获取,path域中的值需要使用@PathVariable来获取,body域中的值使用@RequestBody来获取,否则可能出错;而且如果paramType是body,name就不能是body,否则有问题,与官方文档中的“If paramType is “body”, the name should be “body”不符。

  完整demo下载地址:https://github.com/jlq023/spring_swaggerDemo

发表于 2018-02-21 23:46 喝着啤酒写bug 阅读() 评论() 编辑 收藏

 

版权声明:本文为cq-jiang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/cq-jiang/p/8457770.html

springMvc+swagger整合例子的更多相关文章

  1. java 零基础搭建dubbo运行环境

    java 零基础搭建dubbo运行环境 一:简介       以前做项目时,分布式环境都是其它同事在搭建,自己 […]...

  2. MQ 架构与细节

    MQ 架构与细节 MQ 是什么? MQ:MessageQueue,消息队列的简称,用于进程间通信或同一进程的不 […]...

  3. java并发之锁的使用浅析

            锁像synchronized同步块一样,是一种线程同步机制。让自Java 5开始,java.u […]...

  4. Java多线程

    多线程基础 一、创建线程 仅仅只有new Thread这种方法创建线程 Java中无法销毁一个线程,只能表现一 […]...

  5. AQS原理浅析

            锁是最常用的同步方法之一,在高并发的环境下激烈的锁竞争会导致程序的性能下降,所以我们自然有必要 […]...

  6. 自学 Java 怎么入门?

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。  说过很多遍这个话题了。重复一遍,再说一 […]...

  7. Spring Boot 自动装配原理

    Spring Boot 自动装配原理 Spring Boot 在启动之前还有一系列的准备工作,比如:推断 we […]...

  8. JAVA并发之阻塞队列浅析

    背景 因为在工作中经常会用到阻塞队列,有的时候还要根据业务场景获取重写阻塞队列中的方法,所以学习一下阻塞队列的 […]...

随机推荐

  1. 安装Windows10后,必做的6项优化,让你的电脑运行更快

    现在很多朋友的电脑都安装了Windows10系统,所以今天小编就来说一说安装windows10必做的6项优化, […]...

  2. Ubuntu配置Git并利用Gitee(码云)进行项目及代码的管理

    Ubuntu配置Git并利用Gitee(码云)进行项目及代码的管理 git安装与卸载 apt-get inst […]...

  3. SQL数据库基本操作语句

    一、数据库及数据库表定义  1、创建基本表     create table <表名> (< […]...

  4. java中的ShortBuffer

    一、概述 java.lang.Object java.nio.Buffer java.nio.ShortBuf […]...

  5. 【已解决,绝对好用】Error during artifact deployment. See server log for details.

      参考:https://blog.csdn.net/wt520it/article/details/8812 […]...

  6. [c++]一个简单计算器(先大致写一下,有时间再整理)

    技术栈:c++基本语法,STL中队列和栈的应用,以及程序打包相关操作 开发工具:vs2019 和部分插件   […]...

  7. QQ密码加密操作辅助类 QQEncryptUtil

    实现效果   1)本辅助类主要是用来方便实现QQ密码加密操作。  2)在QQ的很多模拟网页采集数据,需要输入用 […]...

  8. 隐藏网站的方法

    在母版页中的这一句的<span class=”ms-siteactionsmenu̶ […]...

展开目录

目录导航