美文网首页
SpringBoot使用Swagger2实现Restful AP

SpringBoot使用Swagger2实现Restful AP

作者: 你丫的才程序员 | 来源:发表于2018-12-21 14:43 被阅读72次

很多时候,我们需要创建一个接口项目用来数据调转,其中不包含任何业务逻辑。这时我们就需要实现一个具有Restful API的接口项目。

本文介绍springboot使用swagger2实现Restful API。
这里使用mysql+jpa+swagger2,所以可以直接操作然后看数据库进行测试。
关于springboot和JPA的整合下篇文章介绍

首先pom中加入swagger2,代码如下:
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ooliuyue</groupId>
    <artifactId>springboot_swagger</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springboot_swagger</name>
    <description>springboot_swagger</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.6.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <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>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
appication.properties配置
##端口号
server.port=8888

##数据库配置
##数据库地址
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_test?characterEncoding=utf8&useSSL=false
##数据库用户名
spring.datasource.username=root
##数据库密码
spring.datasource.password=root
##数据库驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
##validate  加载hibernate时,验证创建数据库表结构
##create   每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
##create-drop        加载hibernate时创建,退出是删除表结构
##update                 加载hibernate自动更新数据库结构
##validate 启动时验证表的结构,不会创建表
##none  启动时不做任何操作
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
创建一个swagger2配置类,简单解释一下,@Configuration注解让spring来加载配置,@EnableSwagger2开启swagger2。
package com.ooliuyue.springboot_swagger.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;

/**
 * @Auther: ly
 * @Date: 2018/12/18 09:41
 */
@Configuration  //让spring来加载配置
@EnableSwagger2 //开启swagger2
public class Swagger2Config {
    @Bean
    public Docket creatRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.ooliuyue.springboot_swagger"))
                .paths(PathSelectors.any())
                .build();

    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("使用Swagger2构建RESTful APIs")
                .description("一点寒芒先到,随后枪出如龙")
                .contact("ooliuyue")
                .version("1.0")
                .build();
    }
}
实体类User
package com.ooliuyue.springboot_swagger.entity;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import javax.persistence.*;

/**
 * @Auther: ly
 * @Date: 2018/12/17 17:56
 */
@Entity
@Table(name = "User")
@ApiModel(description = "user")
public class User {

    public User() {

    }

    public User(Integer id, String username, int age) {
        this.id = id;
        this.username = username;
        this.age = age;
    }

    @ApiModelProperty(value = "主键id",hidden = true)
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @ApiModelProperty(value = "用户名称")
    @Column
    private String username;

    @ApiModelProperty(value = "用户年龄")
    @Column
    private int age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
jpa数据操作类TestUserDao
package com.ooliuyue.springboot_swagger.dao;

import com.ooliuyue.springboot_swagger.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface TestUserDao extends JpaRepository<User,Integer> {
}
然后添加文档内容,其实和写controller一样,只不过方法和参数中间穿插一些注解。
package com.ooliuyue.springboot_swagger.controller;

import com.ooliuyue.springboot_swagger.dao.TestUserDao;
import com.ooliuyue.springboot_swagger.entity.User;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Auther: ly
 * @Date: 2018/12/18 10:22
 */
@RestController
@RequestMapping(value = "/user")
@Api(value = "用户操作接口",tags = {"用户操作接口"})
public class UserController {
    @Autowired
    private TestUserDao testUserDao;

    @ApiOperation(value="获取用户详细信息", notes="根据用户的id来获取用户详细信息")
    @ApiImplicitParam(name = "id", value = "用户ID", required = true,paramType = "query", dataType = "Integer")
    @GetMapping(value = "/findById")
    public User findById(@RequestParam(value = "id") int id){
        User user = testUserDao.findOne(id);
        return user;
    }

    @ApiOperation(value="获取用户列表", notes="获取用户列表")
    @GetMapping(value="/getUserList")
    public List getUserList(){
        return testUserDao.findAll();

    }

    @ApiOperation(value="保存用户", notes="保存用户")
    @PostMapping(value="/saveUser")
    public String saveUser(@RequestBody @ApiParam(name="用户对象",value="传入json格式",required=true) User user){
        testUserDao.save(user);
        return "success!";
    }

    @ApiOperation(value="修改用户", notes="修改用户")
    @ApiImplicitParams({
            @ApiImplicitParam(name="id",value="主键id",required=true,paramType="query",dataType="Integer"),
            @ApiImplicitParam(name="username",value="用户名称",required=true,paramType="query",dataType = "String"),
            @ApiImplicitParam(name="age",value="用户年龄",required=true,paramType="query",dataType = "Integer")
    })
    @GetMapping(value="/updateUser")
    public String updateUser(@RequestParam(value = "id")int id,@RequestParam(value = "username")String username,
                             @RequestParam(value = "age")Integer age){
        User user = new User(id, username, age);
        testUserDao.save(user);
        return "success!";
    }

    @ApiOperation(value="删除用户", notes="根据用户的id来删除用户")
    @ApiImplicitParam(name = "id", value = "用户ID", required = true,paramType = "query", dataType = "Integer")
    @DeleteMapping(value="/deleteUserById")
    public String deleteUserById(@RequestParam(value = "id")int id){
        User user = testUserDao.findOne(id);
        testUserDao.delete(user);
        return "success!";
    }

}

启动项目,访问http://localhost:8888/swagger-ui.html,可以看到如下图

swagger
github地址

相关文章

网友评论

      本文标题:SpringBoot使用Swagger2实现Restful AP

      本文链接:https://www.haomeiwen.com/subject/fdimkqtx.html