Spring MVC中使用 Swagger2 构建Restful API

0.Spring MVC配置文件中的配置

[java] view plain copy
  1. <!-- 设置使用注解的类所在的jar包,只加载controller类 -->  
  2. <span style="white-space:pre">    </span><context:component-scan base-package="com.jay.plat.config.controller" />   
[java] view plain copy
  1. <!-- 使用 Swagger Restful API文档时,添加此注解 -->  
  2.     <mvc:default-servlet-handler />  


1.maven依赖

[html] view plain copy
  1. <!-- 构建Restful API -->  
  2.           
  3.         <dependency>  
  4.             <groupId>io.springfox</groupId>  
  5.             <artifactId>springfox-swagger2</artifactId>  
  6.             <version>2.4.0</version>  
  7.         </dependency>  
  8.         <dependency>  
  9.             <groupId>io.springfox</groupId>  
  10.             <artifactId>springfox-swagger-ui</artifactId>  
  11.             <version>2.4.0</version>  
  12.         </dependency>  


2.Swagger配置文件

[java] view plain copy
  1. package com.jay.plat.config.util;  
  2.   
  3. import org.springframework.context.annotation.Bean;  
  4. import org.springframework.context.annotation.ComponentScan;  
  5. import org.springframework.context.annotation.Configuration;  
  6. import org.springframework.web.servlet.config.annotation.EnableWebMvc;  
  7. import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;  
  8.   
  9.   
  10. import springfox.documentation.builders.ApiInfoBuilder;  
  11. import springfox.documentation.builders.PathSelectors;  
  12. import springfox.documentation.builders.RequestHandlerSelectors;  
  13. import springfox.documentation.service.ApiInfo;  
  14. import springfox.documentation.spi.DocumentationType;  
  15. import springfox.documentation.spring.web.plugins.Docket;  
  16. import springfox.documentation.swagger2.annotations.EnableSwagger2;  
  17. /* 
  18.  * Restful API 访问路径: 
  19.  * http://IP:port/{context-path}/swagger-ui.html 
  20.  * eg:http://localhost:8080/jd-config-web/swagger-ui.html 
  21.  */  
  22. @EnableWebMvc  
  23. @EnableSwagger2  
  24. @ComponentScan(basePackages = {"com.<span style="font-family:Arial, Helvetica, sans-serif;">jay.</span>plat.config.controller"})  
  25. @Configuration  
  26. public class RestApiConfig extends WebMvcConfigurationSupport{  
  27.   
  28.     @Bean  
  29.     public Docket createRestApi() {  
  30.         return new Docket(DocumentationType.SWAGGER_2)  
  31.                 .apiInfo(apiInfo())  
  32.                 .select()  
  33.                 .apis(RequestHandlerSelectors.basePackage("com.jay.plat.config.controller"))  
  34.                 .paths(PathSelectors.any())  
  35.                 .build();  
  36.     }  
  37.   
  38.     private ApiInfo apiInfo() {  
  39.         return new ApiInfoBuilder()  
  40.                 .title("Spring 中使用Swagger2构建RESTful APIs")  
  41.                 .termsOfServiceUrl("http://blog.csdn.net/he90227")  
  42.                 .contact("逍遥飞鹤")  
  43.                 .version("1.1")  
  44.                 .build();  
  45.     }  
  46. }  


配置说明:

            

[html] view plain copy
  1. @Configuration 配置注解,自动在本类上下文加载一些环境变量信息  
  2. @EnableWebMvc   
  3. @EnableSwagger2 使swagger2生效  
  4. @ComponentScan("com.myapp.packages") 需要扫描的包路径  

3.Controller中使用注解添加API文档

[java] view plain copy
  1. package com.jay.spring.boot.demo10.swagger2.controller;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.Collections;  
  5. import java.util.HashMap;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8.   
  9. import org.springframework.web.bind.annotation.PathVariable;  
  10. import org.springframework.web.bind.annotation.RequestBody;  
  11. import org.springframework.web.bind.annotation.RequestMapping;  
  12. import org.springframework.web.bind.annotation.RequestMethod;  
  13. import org.springframework.web.bind.annotation.RestController;  
  14.   
  15. import com.jay.spring.boot.demo10.swagger2.bean.User;  
  16.   
  17. import io.swagger.annotations.ApiImplicitParam;  
  18. import io.swagger.annotations.ApiImplicitParams;  
  19. import io.swagger.annotations.ApiOperation;  
  20.   
  21. @RestController  
  22. @RequestMapping(value = "/users"// 通过这里配置使下面的映射都在/users下,可去除  
  23. public class UserController {  
  24.   
  25.     static Map<Long, User> users = Collections.synchronizedMap(new HashMap<Long, User>());  
  26.   
  27.     @ApiOperation(value = "获取用户列表", notes = "")  
  28.     @RequestMapping(value = { "" }, method = RequestMethod.GET)  
  29.     public List<User> getUserList() {  
  30.         List<User> r = new ArrayList<User>(users.values());  
  31.         return r;  
  32.     }  
  33.   
  34.     @ApiOperation(value = "创建用户", notes = "根据User对象创建用户")  
  35.     @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")  
  36.     @RequestMapping(value = "", method = RequestMethod.POST)  
  37.     public String postUser(@RequestBody User user) {  
  38.         users.put(user.getId(), user);  
  39.         return "success";  
  40.     }  
  41.   
  42.     @ApiOperation(value = "获取用户详细信息", notes = "根据url的id来获取用户详细信息")  
  43.     @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long")  
  44.     @RequestMapping(value = "/{id}", method = RequestMethod.GET)  
  45.     public User getUser(@PathVariable Long id) {  
  46.         return users.get(id);  
  47.     }  
  48.   
  49.     @ApiOperation(value = "更新用户详细信息", notes = "根据url的id来指定更新对象,并根据传过来的user信息来更新用户详细信息")  
  50.     @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long"),  
  51.             @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User") })  
  52.     @RequestMapping(value = "/{id}", method = RequestMethod.PUT)  
  53.     public String putUser(@PathVariable Long id, @RequestBody User user) {  
  54.         User u = users.get(id);  
  55.         u.setName(user.getName());  
  56.         u.setAge(user.getAge());  
  57.         users.put(id, u);  
  58.         return "success";  
  59.     }  
  60.   
  61.     @ApiOperation(value = "删除用户", notes = "根据url的id来指定删除对象")  
  62.     @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long")  
  63.     @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)  
  64.     public String deleteUser(@PathVariable Long id) {  
  65.         users.remove(id);  
  66.         return "success";  
  67.     }  
  68.   
  69. }  


4.效果展示

访问路径:
[java] view plain copy
  1. Restful API 访问路径:  
  2.  * http://IP:port/{context-path}/swagger-ui.html  
  3.  * eg:http://localhost:8080/jd-config-web/swagger-ui.html  


参考:
http://www.cnblogs.com/yuananyun/p/4993426.html
http://www.jianshu.com/p/8033ef83a8ed

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

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

相关文章

platform(win32) 错误

运行cnpm install后&#xff0c;出现虽然提示不适合Windows&#xff0c;但是问题好像是sass loader出问题的。所以只要执行下面命令即可&#xff1b;方案一&#xff1a;cnpm rebuild node-sass #不放心可以重新安装下 cnpm install方案二&#xff1a;npm update npm install no…

Error: Program type already present: okhttp3.Authenticator$1

在app中的build.gradle中加入如下代码&#xff0c; configurations {all*.exclude group: com.google.code.gsonall*.exclude group: com.squareup.okhttp3all*.exclude group: com.squareup.okioall*.exclude group: com.android.support,module:support-v13 } 如图 转载于:ht…

ES6规范 ESLint

在团队的项目开发过程中&#xff0c;代码维护所占的时间比重往往大于新功能的开发。因此编写符合团队编码规范的代码是至关重要的&#xff0c;这样做不仅可以很大程度地避免基本语法错误&#xff0c;也保证了代码的可读性&#xff0c;毕竟&#xff1a;程序是写给人读的&#xf…

前端 HTML 常用标签 head标签相关内容 script标签

script标签 定义JavaScript代码 <!--定义JavaScript代码--> <script type"text/javascript"></script> 引入JavaScript文件 src""引入的 js文件路径 <!-- 引入JavaScript文件 --> <script src"./index.js"></s…

ACM001 Quicksum

本题的重点在于数据的读入。 可采用cin.getlin()一行一行读入数据&#xff1b;也可采用cin.get()一个一个读入字符。 cin会忽略回车、空格、Tab跳格。 cin.get()一个一个字符读&#xff0c;不忽略任何字符。 cin.getline()一行一行读入。 #include<fstream> #include…

05 MapReduce应用案例03

8、PageRank Page-rank源于Google&#xff0c;用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度。 Page-rank实现了将链接价值概念作为排名因素。 算法原理 – 入链 投票 • Page-rank 让链接来“ 投票 “ ,到一个页面的超链接相当于对该页投一票。 – 入…

利用微信的weui框架上传、预览和删除图片

jQuery WeUI 是专为微信公众账号开发而设计的一个框架&#xff0c;jQuery WeUI的官网&#xff1a;http://jqweui.com/ 需求&#xff1a;需要在微信公众号网页添加上传图片功能 技术选型&#xff1a;实现上传图片功能可选百度的WebUploader、饿了么的Element和微信的jQuery WeUI…

【转】Java Socket编程基础及深入讲解

原文&#xff1a;https://www.cnblogs.com/yiwangzhibujian/p/7107785.html#q2.3.3 Socket是Java网络编程的基础&#xff0c;了解还是有好处的&#xff0c; 这篇文章主要讲解Socket的基础编程。Socket用在哪呢&#xff0c;主要用在进程间&#xff0c;网络间通信。本篇比较长&am…

使用 vue-i18n 切换中英文

使用 vue-i18n 切换中英文vue-i18n 仓库地址&#xff1a;https://github.com/kazupon/vue-i18n兼容性&#xff1a;支持 Vue.js 2.x 以上版本安装方法&#xff1a;&#xff08;此处只演示 npm&#xff09;npm install vue-i18n使用方法&#xff1a;1、在 main.js 中引入 vue-i18…

ZooKeeper数据模型

Zookeeper的数据模型 层次化的目录结构&#xff0c;命名符合常规文件系统规范&#xff08;Linux&#xff09; 每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识 节点Znode可以包含数据和子节点(即子目录)&#xff0c;但是EPHEMERAL类型的节点不能有子节点 Znod…

堆叠条形图

堆叠条形图 import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import matplotlib.dates as mdates#解决能显示中文 mpl.rcParams[font.sans-serif][SimHei] #指定默认字体 SimHei为黑体 mpl.rcParams[axes.unicode_minus]Fal…

01 Python变量和数据类型

Python变量和数据类型 1 数据类型 计算机&#xff0c;顾名思义就是可以做数学计算的机器&#xff0c;因此&#xff0c;计算机程序理所当然也可以处理各种数值。 但是&#xff0c;计算机能处理的远不止数值&#xff0c;还可以处理文本、图形、音频、视频、网页等各种各样的数…

02 List、Tuple、Dict、Set

List 线性表 创建List&#xff1a; >>> classmates [Michael, Bob, Tracy] >>> L [Michael, 100, True] #可以在list中包含各种类型的数据 >>> empty_list [] #空List 按索引访问List&#xff1a; >>> print L[0] #索引从0开始…

利用layui前端框架实现对不同文件夹的多文件上传

利用layui前端框架实现对不同文件夹的多文件上传 问题场景&#xff1a; 普通的input标签实现多文件上传时&#xff0c;只能对同一个文件夹下的多个文件进行上传&#xff0c;如果要同时上传两个或多个文件夹下的文件&#xff0c;是无法实现的。这篇文章就是利用layui中的插件&am…

yzh的神仙题

U66905 zz题 考虑一个点权值被计算了多少次。。。不知 所以对未来承诺&#xff0c;方便直接算上总数&#xff01; 然后其实是给边定向&#xff0c;即先删除fa和son的哪一个 f[x][j]&#xff0c;会计算j次 无法转移 f[x][j][k]&#xff0c;其中会从子树计算k次。 当边从儿子指向…

利用Caffe实现mnist的数据训练

阿里云的参考文档&#xff1a;https://help.aliyun.com/document_detail/49571.html在文档里提供了caffe的一个案例&#xff0c;利用Caffe实现mnist的数据训练。准备的数据源可以在“深度学习案例代码及数据下载”页找到Caffe数据下载并解压。要训练自己的图片&#xff0c;还是…

06 函数式編程

1 函数式编程简介 函数&#xff1a;function 函数式&#xff1a;functional 一种编程范式 特点&#xff1a; 把计算视为函数而非指令 纯函数式编程&#xff1a;不需要变量&#xff0c;没有副作用&#xff0c;测试简单 支持高阶函数&#xff0c;代码简洁 Python支持的函数式…

jQuery WeUI 上传

jQuery WeUI 是专为微信公众账号开发而设计的一个框架&#xff0c;jQuery WeUI的官网&#xff1a;http://jqweui.com/ 需求&#xff1a;需要在微信公众号网页添加上传图片功能 技术选型&#xff1a;实现上传图片功能可选百度的WebUploader、饿了么的Element和微信的jQuery WeUI…

1.rabbitmq 集群版安装及使用nginx进行四层负载均衡设置

1.安装erlang 需要注意erlang的版本是否满足rabbitmq的需求 这里用到的版本是&#xff1a;Erlang 19.0.4 RabbitMQ 3.6.15 wget http://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el7.centos.x86_64.rpmrpm -ivh erlang-19.0.4-1.el7.centos.x86_64.rpm yum -y inst…

H5+jqweui实现手机端图片压缩上传 Base64

H5jqweui实现手机端图片压缩上传主要功能&#xff0c;使用H5的formData上传base64格式的图片&#xff0c;canvas压缩图片&#xff0c;前端样式使用weui&#xff0c;为方便起见&#xff0c;使用了jquery封装过的weui&#xff0c;jqweui。话不多少&#xff0c;开始上代码。前端代…