GVKun编程网logo

Swagger没有通过Spring Boot检测到Spring Data Rest API(没有springbootapplication)

14

在本文中,我们将给您介绍关于Swagger没有通过SpringBoot检测到SpringDataRestAPI的详细内容,并且为您解答没有springbootapplication的相关问题,此外,我

在本文中,我们将给您介绍关于Swagger没有通过Spring Boot检测到Spring Data Rest API的详细内容,并且为您解答没有springbootapplication的相关问题,此外,我们还将为您提供关于idea 社区版+spring boot+ssm+swagger创建rest api、Java | Spring Boot Swagger2 集成REST ful API 生成接口文档、spring boot / cloud (三) 集成springfox-swagger2构建在线API文档、Spring Boot 中使用 Swagger2 构建强大的 RESTful API 文档的知识。

本文目录一览:

Swagger没有通过Spring Boot检测到Spring Data Rest API(没有springbootapplication)

Swagger没有通过Spring Boot检测到Spring Data Rest API(没有springbootapplication)

我设置了一个Spring Boot项目,其中包括Spring Data Rest和Swagger:

<dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-data-rest</artifactId></dependency><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>

这是我的Swagger配置:

@Configuration@EnableSwagger2public class SwaggerConfig {    @Bean    public Docket api() {        return new Docket(DocumentationType.SWAGGER_2)                .select()                .apis(RequestHandlerSelectors.any())                .paths(PathSelectors.any())                .build();    }}

摘自application.properties:

spring.data.rest.base-path=/apiserver.context-path=/myapp

运行服务器时,所有其余端点均已正确映射并可以访问/myapp/api/...,包括我自己创建的自定义RestController。

然而:

  • http://localhost:8080/myapp/api我可以看到春天的数据的REST API列表(JSON格式),但不能看到我的自定义RestController端点。

  • http://localhost:8080/myapp/swagger-ui.html我看到的一个不错的gui中,它仅列出了我的自定义RestController和错误端点,而不列出Spring Data Rest API。实际上,http:// localhost:8080 / myapp / v2 / api-docs没有对Spring Data Rest端点进行任何引用,而仅引用了我自定义的RestController和错误端点。

如何修复Spring Data Rest&Swagger配置?

答案1

小编典典

Spring Data
Rest支持仅在springfox
2.6.0版本中引入。如果在升级到最新版本的springfox(在撰写本文时为2.6.1)之后,按照说明进行操作,则渲染端点应该没有问题。

idea 社区版+spring boot+ssm+swagger创建rest api

idea 社区版+spring boot+ssm+swagger创建rest api

新手上路,出了好多错,记录一下

 

1.创建数据库:springBootSsmTest

2.打开IDEA创建 Spring boot项目:File——New——Project——Spring Assistant,下一步,填好包名等信息,下一步

Develop Tool选Lombok

Web选Spring Web

SQL选Jpa,Mysql,Mybatis

3.把java文件夹标识 为Source Root(右键,Mark as Directory As —— Source Root)

4.在com.my.demo下创建package命名为model,然后在这里创建 Java 类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
@Table(name = "tb_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)

private Integer id;
private String userName;
private String password;
private String email;
}

5.在resources下创建文件application.yml,删除原先的application.properties,粘帖如下代码:

spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/springbootssmtest?serverTimezone=UTC
username: root
password: 123456

jpa:
hibernate:
ddl-auto: update
show-sql: true
6.运行程序,会自动生成数据表。
7.创建package命名为mapper,添加一个java类,命名为UserMapper
import java.util.List;
public interface UserMapper {
User getUser(Integer id);//根据id获取信息
boolean addUser(User user);//新增
boolean modifyUser(User user);//修改
boolean deleteUser(Integer id);//根据id删除
List<User> getAll();//获取所有
}
8.创建package命名为service,添加一个java类,命名为UserService
@Service
public class UserService {
@Autowired
private UserMapper userMapper;

public User getUser(Integer id){
return userMapper.getUser(id);
}

public boolean addUser(User user){
return userMapper.addUser(user);
}

public boolean modifyUser(User user){
return userMapper.modifyUser(user);
}

public boolean deleteUser(Integer id){
return userMapper.deleteUser(id);
}

public List<User> getAll(){
return userMapper.getAll();
}
}
9.创建package命名为controller,创建Java类命名为UserController
@RestController
public class UserController {
@Autowired
private UserService userService;


/**
* 获取默认的数据源信息
* @return
* @throws SQLException
*/

/**
* 根据id获取信息
* @param id
* @return
* @throws SQLException
*/
@ResponseBody
@GetMapping("/user/get/{id}")
public User getUser(@PathVariable("id") Integer id){
return userService.getUser(id);
}

/**
* 获取所有信息
* @return
*/
@ResponseBody
@GetMapping("/user/list")
public List<User> getAll(){
return userService.getAll();
}

/**
* 新增信息
* @param user
* @return
*/
@ResponseBody
@PostMapping("/user/add")
public boolean addUser(@RequestBody User user){
return userService.addUser(user);
}

/**
* 修改信息
* @param user
* @return
*/
@ResponseBody
@PutMapping("/user/put")
public boolean modifyUser(@RequestBody User user){
return userService.modifyUser(user);
}

/**
* 删除信息
* @param id
* @return
*/
@ResponseBody
@DeleteMapping("/user/delete/{id}")
public boolean deleteUser(@PathVariable("id") Integer id){
return userService.deleteUser(id);
}
}
10.添加依赖,Import Change
<!-- 整合Swagger依赖方便 REST测试  -->
<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.7.0</version>
</dependency>


11.打开主类,添加注解,记得改包名


@MapperScan("com.my.demo.mapper")//自动扫描的Mapper包,如果这里不指定,则需要在每个Mapper接口中添加@Mapper主键(这两种方法二选一)
@EnableSwagger2 //开启Swagger2功能,方便测试RestApi
12.在resources下创建目录mapper,添加一个文件UserMapper,记得修改文件中两处包名。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.my.demo.mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.my.demo.model.User">
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="user_name" jdbcType="VARCHAR" property="userName"/>
<result column="password" jdbcType="VARCHAR" property="password"/>
<result column="email" jdbcType="VARCHAR" property="email"/>
</resultMap>
<!-- 根据id获取信息 -->
<select id="getUser" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select * from tb_user t where t.id = #{id}
</select>
<!-- 获取所有信息 -->
<select id="getAll" resultMap="BaseResultMap">
select * from tb_user t
</select>
<!-- 新增 -->
<insert id="addUser" parameterType="user">
insert into tb_user values(default,#{userName},#{password},#{email})
</insert>
<!-- 修改 -->
<update id="modifyUser" parameterType="user">
update tb_user set user_name=#{userName},password=#{password},email=#{email} where id = #{id}
</update>
<!-- 删除 -->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from tb_user where id = #{id}
</delete>
</mapper>
13.在application.yml中添加,记得改包名,顶格,和spring同一层次。

# Mybatis相关配置
mybatis:
# 对象别名包
type-aliases-package: com.my.demo.model
# Mybatis mapper.xml映射文件配置
mapper-locations:
- classpath:mappers/*.xml

14.运行程序吧。

Java | Spring Boot Swagger2 集成REST ful API 生成接口文档

Java | Spring Boot Swagger2 集成REST ful API 生成接口文档

  • 分享图片

 

Spring Boot Swagger2 集成REST ful API 生成接口文档

原文

简介

由于Spring Boot 的特性,用来开发 REST ful 变得非常容易,并且结合 Swagger 来自动生成 REST ful API 文档变得方便快捷。

Swagger 是一个简单但功能强大的API表达工具。几乎所有的语言都可以找到与之对应的Swagger 版本。使用Swagger生成API,我们可以得到交互式文档。听过Spring Boot 与Swagger 的结合,生成更加完备的REST ful API 文档。通过在源码中添加部分内容,系统生成文档,大大提高工作效率,不用再花费大量时间来创建文档,同时由于同时是通过代码开生成文档,大大降低了维护成本
Swagger 不仅可以组织生成强大的 REST ful 文档,同时也提供了完备的测试功能,可以直接在文档页面测试接口功能。

接下来将基于 Spring Boot 与Swagger 2 搭建完整的API 文档系统。先来提前目睹下Swagger 生成的文档样式

分享图片

实践

创建Spring Boot 工程

可以参考前文Spring Boot 初体验

在POM 文件中添加 Swagger2 包引用

<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.7.0</version> </dependency> //导入测试需要的库 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.196</version> <scope>runtime</scope> </dependency> 

本实例采用的是基于内存数据库H2 的JPA 形式

创建配置类

通过以上方式只能导入 Swagger2 需要的jar包,但当前并不能运行(虽然Spring boot 支持自动化配置)

@Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api(){ return new Docket(DocumentationType.SWAGGER_2).select() .apis(RequestHandlerSelectors.basePackage("com.springboot.demo")) .paths(PathSelectors.any()) .build() .apiInfo(apiInfo()); } private ApiInfo apiInfo(){ return new ApiInfoBuilder() .title("Spring Boot中使用Swagger2构建RESTful APIs") .description("spring boot,swagger2") .termsOfServiceUrl("http:github.com/zhuamaodeyu") .contact("抓?的?") .version("1.0") .build(); } }

说明:

  1. @Configuration: 此注解是告诉 Spring Boot 这是一个配置类,需要在项目启动时加载该类
  2. @EnableSwagger2Swagger2 是通过此注解来启动的
  3. 通过 api方法创建 Docket 对象,其中主要注意 basePackage配置以及私有方法 apiInfo方法创建的基本信息
    通过指定扫描包来配置,以上配置 Swagger 会扫描整个项目工程

创建实体和respository

@Entity @Table(name="user") public class User implements Serializable { // @ApiModelProperty(notes = "id") @Id @GeneratedValue(strategy = GenerationType.AUTO) private String id; @ApiModelProperty(notes = "uuid") private UUID uuid; @ApiModelProperty(notes = "用户名称") private String name; private String password; @ApiModelProperty(notes = "用户地址") private String address; @ApiModelProperty(notes = "年龄") private int age; @ApiModelProperty(notes = "邮箱地址") private String email; @ApiModelProperty(notes = "描述") private String desc; // getter/ setter 方法 } @Repository public interface UserRepository extends CrudRepository<User,String> { } 

测试controller

@RestController @Api(value = "product 商品操作API") @RequestMapping("/product") public class IndexController { /** * 1. 获取列表 * 2. 显示单个的信息 * 3. 添加 * 4. 更新 * 5. 删除 */ @Autowired private UserRepository userRepository; @GetMapping("/") @ApiOperation(value = "首页",notes = "测试代码") public String index() { return "index"; } @GetMapping("/list") @ApiOperation(value = "获取全部数据列表",notes = "获取数据列表") public Iterable list(Model model) { return userRepository.findAll(); } @GetMapping("/get_user_message") @ApiOperation(value = "获取用户详情信息") @ApiImplicitParam(name = "userId",value = "用户ID",defaultValue = "",required = true,dataType = "String") public User getUserMessage(String userId) { return userRepository.findOne(userId); } @PostMapping("/save") @ApiOperation(value = "保存用户数据") @ApiImplicitParam(name = "user",value = "用户对象",dataTypeClass = User.class) public String save(@RequestBody User user) { if (user == null) { return "false"; } userRepository.save(user); return "true"; } @PutMapping("/update/{userId}") @ApiOperation(value = "更新用户数据") @ApiImplicitParams({ @ApiImplicitParam(name = "userId",value = "用户的ID",dataTypeClass = String.class),@ApiImplicitParam(name = "user",dataTypeClass = User.class) }) public ResponseEntity updateUserMessage(@PathVariable String userId,@RequestBody User user) { User user1 = userRepository.findOne(userId); user1.setAddress(user.getAddress()); userRepository.save(user1); return new ResponseEntity("更新数据成功",HttpStatus.OK); } @DeleteMapping("/delete/{userId}") @ApiOperation(value = "根据用户ID 删除用户数据") @ApiImplicitParam(name = "删除用户数据",value = "",dataType = "String") public ResponseEntity deleteUser(@PathVariable String userId) { userRepository.delete(userId); return new ResponseEntity("删除用户数据",HttpStatus.OK); } }

测试

实现以上代码,启动项目 直接访问http://localhost:8080/swagger-ui.html
就能看到Swagger2 所生成的文档。可以操作每个请求,其下面是具体的描述和文档内容

接口调试
  1. Swagger 集成测试
    前文提到 Swagger 也提供了 接口调试功能, 可以直接根据接口要求在图中标记处填写接口参数

    调试

  2. Postman 测试
    通过以上方式可以得到接口文档,其包含了具体的内容,有了这些内容,就可以通过Postman 等专业的接口测试工具来进行接口的测试

    postman接口测试

Swagger2 常用配置详解

  • @Api

    @Api(value="onlinestore",description="当前控制器中的API 的描述信息") 
  • @ApiOperation

    此注解是对当前 API 接口的描述,主要是名称,详细描述,返回值类型等信息

    @ApiOperation(value = "首页",notes = "测试代码",tags = {"测试服务是否正常"},response = String.class)
    • value : API 的名称
    • notes : API 详细描述信息
    • response : 返回值类型
    • tags : 默认的是以 类名为 标签的,此处可以自定义标签
  • @ApiResponses
  • @ApiResponse

    此注解是对API 返回的结果进行描述

    @ApiResponses(value = { @ApiResponse(code = 200,message = "Successfully"),@ApiResponse(code = 401,message = "You are not authorized to view the resource"),@ApiResponse(code = 403,message = "Accessing the resource you were trying to reach is forbidden"),@ApiResponse(code = 404,message = "The resource you were trying to reach is not found") } ) 
  • @ApiImplicitParams
  • @ApiImplicitParam

    这两个注解是对API 请求参数的描述

    @ApiImplicitParams({ @ApiImplicitParam(name = "userId",dataTypeClass = User.class) })
  • @ApiModelProperty
    实体类属性添加描述信息,在接口文档中可针对类属性具体含义进行查看

    @GeneratedValue(strategy = GenerationType.AUTO) private String id; @ApiModelProperty(notes = "uuid") private UUID uuid; @ApiModelProperty(notes = "用户名称") private String name; private String password; @ApiModelProperty(notes = "用户地址") private String address; @ApiModelProperty(notes = "年龄") private int age; @ApiModelProperty(notes = "邮箱地址") private String email; @ApiModelProperty(notes = "描述") private String desc;

    通过以上配置,可以文档中进行查看

    分享图片

扩展知识

Mock 系统

在现如今的开发中,一个由于项目需求紧,开发周期短,通常涉及到后端以及前端协同工作;一个由于现在大多采用的是前后端分离的开发形式,前后端交互只是通过 REST ful 接口形式来实现的,前后端各自分工工作,所以就存在一个现象就是前端做的快,后端无法及时的给出接口实现并且开发阶段没有数据支撑而造成前端必须等待后端。

现在可以通过先定义接口文档,生成 Mock 数据的形式来进行前后端分离开发。前端通过调用定义的 Mock 数据来进行前端调试和开发。不需要等待后端的数据

接下来将通过集成 easy-Mock 系统来实现协同开发

easy Mock

easy-mock 是大搜车公司开源的一套 mock 工具,是一个可视化,并且能快速生成 模拟数据 的持久化服务. 下面将 easy-mock 与 Swagger 结合进行协同工作

  • 搭建easy-mock

    • 下载源码
      easy-mock是一套开源系统,其托管在 github 上,可以通过一下方式获取源码
      git clone https://github.com/easy-mock/easy-mock.git
    • 修改配置
      easy-mock 是使用MongoDB数据的,所以需要配置数据库
      进入 config文件夹,修改 default.json文件

      {
            "port": 7300,"pageSize": 30,"routerPrefix": { "mock": "/mock","api": "/api" },"db": "mongodb://192.168.99.100:32773/easy-mock_","unsplashClientId": "",

      修改 db 添加一个可以用的 数据库

    • 启动
      npm run dev
      默认的监听 7300 端口,可以通过localhost:7300访问系统
  • 导入 Swagger
    进入系统创建项目并根据以下方式导入 Swagger

    • 获取 Swagger 地址

      获取 Swagger 地址

    • easy-mock创建项目

      创建项目

    • 通过

      同步

参考

  • Easy-Mock
  • SPRING BOOT RESTFUL API DOCUMENTATION WITH SWAGGER 2
  • Setting Up Swagger 2 with a Spring REST API

spring boot / cloud (三) 集成springfox-swagger2构建在线API文档

spring boot / cloud (三) 集成springfox-swagger2构建在线API文档

spring boot / cloud (三) 集成springfox-swagger2构建在线API文档

##前言

###不能同步更新API文档会有什么问题?

理想情况下,为所开发的服务编写接口文档,能提高与周边系统对接联调的效率.但前提条件是,服务和API文档必须是同步更新的,如果不能保证同步,那接口文档就会流于形式,不仅不能起到应有的作用,甚至某些情况下,甚至会误导对接的系统,导致更低效率的沟通.

##思路

  • 根据现有的服务定义来自动生成接口文档

##实现

###1.pom.xml集成springfox-swagger2

	<!-- swagger2 -->
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>${springfox-swagger2.version}</version>
    </dependency>
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>${springfox-swagger2.version}</version>
    </dependency>

###2.创建Swagger2Config类

@Configuration
@EnableSwagger2
public class Swagger2Config {


}

###3.配置Bean

  @Bean
  public WebMvcConfigurerAdapter addResourceHandlers() {
    return new WebMvcConfigurerAdapter() {
      @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
            .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
            .addResourceLocations("classpath:/META-INF/resources/webjars/");
      }
    };
  }

注意点 : 版本号和项目名称可在配置文件中定义(从pom中取)

 @Bean
  public Docket createRestApi() {
    return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
        .apis(RequestHandlerSelectors.basePackage("com.egridcloud")).paths(PathSelectors.any())
        .build();
  }

  private ApiInfo apiInfo() {
    ApiInfoBuilder apiInfoBuilder = new ApiInfoBuilder();
    apiInfoBuilder.title(this.projectName + " online api document");
    apiInfoBuilder.version(version);
    return apiInfoBuilder.build();
  }

###4.使用@Api来标记controller

@RestController
@RequestMapping("demo")
@Api(value = "demo", 
	consumes = "application/json", 
	produces = "application/json",
	protocols = "http")
public class DemoController {

}

###5.使用@ApiOperation来标记方法

  @ApiOperation(value = "add", notes = "add")
  @RequestMapping(value = "add", method = RequestMethod.GET)
  public RestResponse<Integer> add(Integer a, Integer b) {
    return new RestResponse<>(demoService.add(a, b));
  }

###6.使用@ApiImplicitParams和@ApiImplicitParam来标参数

  @ApiOperation(value = "add", notes = "add")
  @ApiImplicitParams({
      @ApiImplicitParam(paramType = "query", name = "a", value = "a", required = true,
          dataType = "int"),
      @ApiImplicitParam(paramType = "query", name = "b", value = "a", required = true,
          dataType = "int") })
  @RequestMapping(value = "add", method = RequestMethod.GET)
  public RestResponse<Integer> add(Integer a, Integer b) {
    return new RestResponse<>(demoService.add(a, b));
  }

###7.使用@ApiModel和@ApiModelProperty来标实体类

@ApiModel(description = "响应消息体")
public class RestResponse<T> implements Serializable {

  /**
   * 
   * 描述 : id
   * 
   */
  private static final long serialVersionUID = 1L;

  /**
   * 描述 : 响应ID
   */
  @ApiModelProperty(value = "响应ID", required = true, dataType = "string")
  private String id = UUID.randomUUID().toString();
 
  .............
  
}

##结束

以上配置结束之后,启动项目,访问http://xxxxx/swagger-ui.html即可能够访问接口文档,并且直接可以做接口调用测试.

然后对于Swagger2这个组件,目前看下来就是对业务代码有一定的入侵,总之使用前请根据自身项目情况做好评估,不要盲目跟风.


想获得最快更新,请关注公众号

想获得最快更新,请关注公众号

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

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

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

这样一来,我们的 RESTful API 就有可能要面对多个开发人员或多个开发团队:IOS 开发、Android 开发或是 Web 开发等。为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份 RESTful API 文档来记录所有接口细节,然而这样的做法有以下几个问题:

  • 由于接口众多,并且细节复杂(需要考虑不同的 HTTP 请求类型、HTTP 头部信息、HTTP 请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下游的抱怨声不绝于耳。
  • 随着时间推移,不断修改接口实现的时候都必须同步修改接口文档,而文档与代码又处于两个不同的媒介,除非有严格的管理机制,不然很容易导致不一致现象。

为了解决上面这样的问题,本文将介绍 RESTful API 的重磅好伙伴 Swagger2,它可以轻松的整合到 Spring Boot 中,并与 Spring MVC 程序配合组织出强大 RESTful API 文档。它既可以减少我们创建文档的工作量,同时说明内容又整合入实现代码中,让维护文档和修改代码整合为一体,可以让我们在修改代码逻辑的同时方便的修改文档说明。另外 Swagger2 也提供了强大的页面测试功能来调试每个 RESTful API。具体效果如下图所示:

alt=

下面来具体介绍,如果在 Spring Boot 中使用 Swagger2。首先,我们需要一个 Spring Boot 实现的 RESTful API 工程,若您没有做过这类内容,建议先阅读
Spring Boot 构建一个较为完成的 RESTful APIs 和单元测试。

下面的内容我们会以教程样例中的 Chapter3-1-1 进行下面的实验(Chpater3-1-5 是我们的结果工程,亦可参考)。

添加 Swagger2 依赖

pom.xml 中加入 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>

创建 Swagger2 配置类

Application.java 同级创建 Swagger2 的配置类 Swagger2

@Configuration
@EnableSwagger2
public class Swagger2 {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.didispace.web"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Spring Boot中使用Swagger2构建RESTful APIs")
                .description("更多Spring Boot相关文章请关注:http://blog.didispace.com/")
                .termsOfServiceUrl("http://blog.didispace.com/")
                .contact("程序猿DD")
                .version("1.0")
                .build();
    }

}

如上代码所示,通过 @Configuration 注解,让 Spring 来加载该类配置。再通过 @EnableSwagger2 注解来启用 Swagger2。

再通过 createRestApi 函数创建 Docket 的 Bean 之后,apiInfo() 用来创建该 Api 的基本信息(这些基本信息会展现在文档页面中)。select() 函数返回一个 ApiSelectorBuilder 实例用来控制哪些接口暴露给 Swagger 来展现,本例采用指定扫描的包路径来定义,Swagger 会扫描该包下所有 Controller 定义的 API,并产生文档内容(除了被 @ApiIgnore 指定的请求)。

添加文档内容

在完成了上述配置后,其实已经可以生产文档内容,但是这样的文档主要针对请求本身,而描述主要来源于函数等命名产生,对用户并不友好,我们通常需要自己增加一些说明来丰富文档内容。如下所示,我们通过 @ApiOperation 注解来给 API 增加说明、通过 @ApiImplicitParams@ApiImplicitParam 注解来给参数增加说明。

@RestController
@RequestMapping(value="/users")     // 通过这里配置使下面的映射都在/users下,可去除
public class UserController {

    static Map<Long, User> users = Collections.synchronizedMap(new HashMap<Long, User>());

    @ApiOperation(value="获取用户列表", notes="")
    @RequestMapping(value={""}, method=RequestMethod.GET)
    public List<User> getUserList() {
        List<User> r = new ArrayList<User>(users.values());
        return r;
    }

    @ApiOperation(value="创建用户", notes="根据User对象创建用户")
    @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
    @RequestMapping(value="", method=RequestMethod.POST)
    public String postUser(@RequestBody User user) {
        users.put(user.getId(), user);
        return "success";
    }

    @ApiOperation(value="获取用户详细信息", notes="根据url的id来获取用户详细信息")
    @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long")
    @RequestMapping(value="/{id}", method=RequestMethod.GET)
    public User getUser(@PathVariable Long id) {
        return users.get(id);
    }

    @ApiOperation(value="更新用户详细信息", notes="根据url的id来指定更新对象,并根据传过来的user信息来更新用户详细信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long"),
            @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
    })
    @RequestMapping(value="/{id}", method=RequestMethod.PUT)
    public String putUser(@PathVariable Long id, @RequestBody User user) {
        User u = users.get(id);
        u.setName(user.getName());
        u.setAge(user.getAge());
        users.put(id, u);
        return "success";
    }

    @ApiOperation(value="删除用户", notes="根据url的id来指定删除对象")
    @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long")
    @RequestMapping(value="/{id}", method=RequestMethod.DELETE)
    public String deleteUser(@PathVariable Long id) {
        users.remove(id);
        return "success";
    }

}

完成上述代码添加上,启动 Spring Boot 程序,访问:http://localhost:8080/swagger-ui.html
。就能看到前文所展示的 RESTful API 的页面。我们可以再点开具体的 API 请求,以 POST 类型的 /users 请求为例,可找到上述代码中我们配置的 Notes 信息以及参数 user 的描述信息,如下图所示。

alt

API 文档访问与调试

在上图请求的页面中,我们看到 user 的 Value 是个输入框?是的,Swagger 除了查看接口功能外,还提供了调试测试功能,我们可以点击上图中右侧的 Model Schema(黄色区域:它指明了 User 的数据结构),此时 Value 中就有了 user 对象的模板,我们只需要稍适修改,点击下方 “Try it out!” 按钮,即可完成了一次请求调用!

此时,你也可以通过几个 GET 请求来验证之前的 POST 请求是否正确。

相比为这些接口编写文档的工作,我们增加的配置内容是非常少而且精简的,对于原有代码的侵入也在忍受范围之内。因此,在构建 RESTful API 的同时,加入 swagger 来对 API 文档进行管理,是个不错的选择。

完整结果示例可查看 Chapter3-1-5。

参考信息

  • Swagger 官方网站

今天的关于Swagger没有通过Spring Boot检测到Spring Data Rest API没有springbootapplication的分享已经结束,谢谢您的关注,如果想了解更多关于idea 社区版+spring boot+ssm+swagger创建rest api、Java | Spring Boot Swagger2 集成REST ful API 生成接口文档、spring boot / cloud (三) 集成springfox-swagger2构建在线API文档、Spring Boot 中使用 Swagger2 构建强大的 RESTful API 文档的相关知识,请在本站进行查询。

本文标签:

上一篇如何在Spring Boot中为Camel配置Jackson ObjectMapper(camunda spring boot)

下一篇两个均带有@SpringBootApplication的Spring Boot项目(两个spring boot 项目之间相互引用)