资讯专栏INFORMATION COLUMN

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

joyvw / 3145人阅读

摘要:集成生成接口文档原文简介由于的特性,用来开发变得非常容易,并且结合来自动生成文档变得方便快捷。使用生成,我们可以得到交互式文档。听过与的结合,生成更加完备的文档。接下来将基于与搭建完整的文档系统。

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 包引用
    
        io.springfox
        springfox-swagger2
        2.7.0
    
    
        io.springfox
        springfox-swagger-ui
        2.7.0
    
    
    //导入测试需要的库 
            
            org.springframework.boot
            spring-boot-starter-data-jpa
        
        
            com.h2database
            h2
            1.4.196
            runtime
        
    

本实例采用的是基于内存数据库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();
    }
}

说明:

@Configuration: 此注解是告诉 Spring Boot 这是一个配置类,需要在项目启动时加载该类

@EnableSwagger2: Swagger2 是通过此注解来启动的

通过 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 {

}

测试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 = "用户对象",required = true, 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", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(name = "user", value = "用户对象", required = true, 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 = "",required = true, dataType = "String")
    public  ResponseEntity deleteUser(@PathVariable String userId)
    {
        userRepository.delete(userId);
        return new ResponseEntity("删除用户数据", HttpStatus.OK);
    }
}
测试

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

接口调试

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

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", value = "用户的ID", required = true, dataTypeClass = String.class),
        @ApiImplicitParam(name = "user", value = "用户对象", required = true, 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 地址

easy-mock创建项目

通过

参考

Easy-Mock

SPRING BOOT RESTFUL API DOCUMENTATION WITH SWAGGER 2

Setting Up Swagger 2 with a Spring REST API

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70753.html

相关文章

  • 《 Kotlin + Spring Boot : 下一代 Java 服务端开发 》

    摘要:下一代服务端开发下一代服务端开发第部门快速开始第章快速开始环境准备,,快速上手实现一个第章企业级服务开发从到语言的缺点发展历程的缺点为什么是产生的背景解决了哪些问题为什么是的发展历程容器的配置地狱是什么从到下一代企业级服务开发在移动开发领域 《 Kotlin + Spring Boot : 下一代 Java 服务端开发 》 Kotlin + Spring Boot : 下一代 Java...

    springDevBird 评论0 收藏0
  • SpringBoot 实战 (五) | 集成 Swagger2 构建强大的 RESTful API

    摘要:今天给你们带来集成的教程。接口返回结果不明确。这些痛点在前后端分离的大型项目上显得尤为烦躁。接口返回结果非常明确,包括数据类型,状态码,错误信息等。生成后的文件依赖如下这里使用的是的版本。另外,关注之后在发送可领取免费学习资料。 微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题。 前言 快过年了,不知道你们啥时候放年假,忙不忙。反正我是挺闲的,所以有时间写 b...

    Rindia 评论0 收藏0
  • SpringBoot 2.X Kotlin与Swagger2生成API文档

    摘要:再通过函数创建的之后,用来创建该的基本信息这些基本信息会展现在文档页面中。函数返回一个实例用来控制哪些接口暴露给来展现,本例采用指定扫描的包路径来定义,会扫描该包下所有定义的,并产生文档内容除了被指定的请求。 showImg(http://download.qfeoo.com/kotlin_springboot_logo.png); 这里有个地方需要注意,在测试WebFlux集成Swa...

    cyqian 评论0 收藏0

发表评论

0条评论

joyvw

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<