Swagger-springboot整合

Swagger 作为一个强大的API文档工具深受广大开发者的喜爱,今天主要做个 springboot 整合 swagger的 demo
方便初学者学习参考

  1. 新建一个springboot 项目
<?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.cloud</groupId>
	<artifactId>swagger-ui</artifactId>
	<version>1.0.0</version>
	<packaging>war</packaging>

	<name>swagger-ui</name>
	<description>swagger Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.10.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

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

	<dependencies>
		<dependency>
		    <groupId>io.springfox</groupId>
		    <artifactId>springfox-swagger2</artifactId>
		    <version>2.8.0</version>
		</dependency>
		<dependency>
		    <groupId>com.github.xiaoymin</groupId>
		    <artifactId>swagger-bootstrap-ui</artifactId>
		    <version>1.9.5</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

其中 springfox-swagger2 为核心JAR包

<dependency>
   <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.8.0</version>
</dependency>

swagger-bootstrap-ui 为页面展示JAR包,包含前端文件,如果喜欢不同的风格可以自行替换

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>swagger-bootstrap-ui</artifactId>
    <version>1.9.5</version>
</dependency>
  1. 新增SwaggerConfiguration 配置文件,配置需要展示的接口文档信息,代码如下:
package com.cloud.configuration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import com.google.common.collect.Sets;

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
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;

@Configuration
@EnableSwagger2
public class SwaggerConfiguration extends WebMvcConfigurationSupport{
	
	
	@Bean
    public Docket userRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("用户相关接口文档")
                .useDefaultResponseMessages(true)
                .forCodeGeneration(false)
                .produces(Sets.newHashSet("application/json"))
                .consumes(Sets.newHashSet("application/json"))
                .protocols(Sets.newHashSet("http", "https"))
                .apiInfo(userApiInfo()).select()
                .apis(RequestHandlerSelectors.basePackage("com.cloud.controller.user"))
                .paths(PathSelectors.any())
                .build();
    }
	
	@Bean
    public Docket orderRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("订单相关接口文档")
                .useDefaultResponseMessages(true)
                .forCodeGeneration(false)
                .produces(Sets.newHashSet("application/json"))
                .consumes(Sets.newHashSet("application/json"))
                .protocols(Sets.newHashSet("http", "https"))
                .apiInfo(userApiInfo()).select()
                .apis(RequestHandlerSelectors.basePackage("com.cloud.controller.order"))
                .paths(PathSelectors.any())
                .build();
    }
	
	@Bean
	public ApiInfo userApiInfo() {
		return new ApiInfoBuilder()
				.title("用户相关接口")
				.description("包含用户XXXXXX相关功能")
				.contact(new Contact("接口域名", "www.test.com", "abc@163.com"))
				.version("1.0.0")
				.build();
	}
	
	@Bean
	public ApiInfo orderApiInfo() {
		return new ApiInfoBuilder()
				.title("订单相关接口")
				.description("包含订单XXXXXX相关功能")
				.contact(new Contact("接口域名", "www.test.com", "abc@163.com"))
				.version("1.0.0")
				.build();
	}
	
	@Override
	protected void addResourceHandlers(ResourceHandlerRegistry registry) {
		//解决swagger无法访问
		registry.addResourceHandler("/doc.html")
				.addResourceLocations("classpath:/META-INF/resources/");
		// 解决swagger的js文件无法访问
		registry.addResourceHandler("/webjars/**")
				.addResourceLocations("classpath:/META-INF/resources/webjars/");
	}
	
}
  1. 接着我们开始编写接口的请求参数,响应参数,方式有很多种,这里采用比较简单通用的一种
    编写Result,实现rest接口的通用参数
@Data
@ApiModel(description = "Result")
public class Result<T> {
	
	@ApiModelProperty(value = "结果码", readOnly = true, required = true)
	private Integer code;
	
	@ApiModelProperty(value = "结果描述", readOnly = true, required = true)
	private String message;
	
	@ApiModelProperty(value = "数据体", readOnly = true, required = true)
	private T data;
	
	public static <T> Result<T> success(T t, String message) {
		Result<T> result = new Result<>();
		result.setCode(0);
		result.setMessage(message);
		result.setData(t);
		return result;
	}
	
	public Boolean checkSuccess() {
		return code != null && code.intValue() == 200;
	}
	
}

接着我们就开始模拟写一个接口,代码很简单,直接给出
请求参数:

@Data
@ApiModel(description = "用户请求")
public class UserRequest {

	@ApiModelProperty(value = "姓名", required = true)
	private String name;
	
	@ApiModelProperty(value = "性别", required = true)
	private Integer sex;
	
	@ApiModelProperty(value = "年龄", required = true)
	private Integer age;
}

响应参数:

@Data
@Builder
@ApiModel(description = "用户信息")
public class UserInfo {

	@ApiModelProperty(value = "姓名", readOnly = true, required = true)
	private String name;
	
	@ApiModelProperty(value = "性别", readOnly = true, required = true)
	private Integer sex;
	
	@ApiModelProperty(value = "年龄", readOnly = true, required = true)
	private Integer age;
}

定义接口:

@RestController
@RequestMapping(value = "/userService")
@Api(value = "用户服务", description = "用户服务")
public class UserController {

	
	@ApiOperation(value = "新增用户信息")
	@RequestMapping(value = "add", method = RequestMethod.POST)
	public Result<UserInfo> add(@RequestBody UserRequest request) {
		UserInfo userInfo = UserInfo.builder()
								.name(request.getName())
								.sex(request.getSex())
								.age(request.getAge())
								.build();
		return Result.success(userInfo, "调用成功!");
	}
}
  1. 编写启动类:SwaggerUiApplication
package com.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SwaggerUiApplication {

	public static void main(String[] args) {
		SpringApplication.run(SwaggerUiApplication.class, args);
	}
	
}
  1. 启动程序,访问: http://127.0.0.1:8080/doc.html
    文档内容
    这是渲染的接口文档:
    接口文档
    Swagger 有个问题,就是必须项目启动时才能够访问,那我们如何生成离线文档呢? 请看后续
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值