将Swagger引入到Spring Boot的REST API中
使用Spring Boot + MySQL来实现简单的Web REST API服务器- Qiita
概述
增加库
buildscript {
ext {
springBootVersion = '2.0.2.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
+ext {
+ springfoxSwagger2Version = '2.8.0'
+ springfoxSwaggerUiVersion = '2.8.0'
+}
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-web')
+ compile("io.springfox:springfox-swagger2:${springfoxSwagger2Version}")
+ compile("io.springfox:springfox-swagger-ui:${springfoxSwaggerUiVersion}")
runtime('mysql:mysql-connector-java')
compileOnly('org.projectlombok:lombok')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
添加设置类
各设置项目都要好好处理。
package com.example.springapi.swagger;
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.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger.web.UiConfiguration;
import springfox.documentation.swagger.web.UiConfigurationBuilder;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket swaggerSpringMvcPlugin() {
return new Docket(DocumentationType.SWAGGER_2)
.useDefaultResponseMessages(false)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.regex("/v1.*"))
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Spring API")
.description("Description.")
.version("0.0.1")
.contact(new Contact("name", "URL", "email"))
.license("license")
.licenseUrl("license URL")
.termsOfServiceUrl("")
.build();
}
@Bean
public UiConfiguration uiConfig() {
return UiConfigurationBuilder.builder()
.displayRequestDuration(true)
.validatorUrl("")
.build();
}
}
请注意
关于基地通道的事项
如果不给控制器添加基本路径,UI将无法启动。
@RequestMapping("/v1")
public class Controller {
如果禁用对静态资源的访问
如果已经设置了”add-mapping: false”,可以明确地设置对Swagger UI的访问,如下所示:
package com.example.springapi.swagger;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("/swagger-ui.html")
.addResourceLocations(this.getStaticLocations());
}
private String[] getStaticLocations() {
return new String[]{
"/",
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/",
};
}
}
界面会显示,但是会出现错误。
@Bean
public UiConfiguration uiConfig() {
return UiConfigurationBuilder.builder()
.validatorUrl("")
.build();
}
确认
给你一份额外的东西
通过给控制器和模型添加注释,可以进行自定义。
/**
* ユーザ検索
*
* @param id 検索したいユーザID
* @return ユーザ
*/
@ApiResponses({
@ApiResponse(code = 404, message = "Not Found", response = ErrorResponse.class),
@ApiResponse(code = 500, message = "Internal Server Error", response = ErrorResponse.class),
})
@GetMapping("{id}")
@ResponseStatus(HttpStatus.OK)
public User findById(@PathVariable("id") String id) {
return this.userService.findById(id);
}