1. Importar MAVEN
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
2. Crie uma classe de configuração
3. Escreva a classe de configuração
código mostrado abaixo:
package com.cy.swagger.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.service.ApiInfo;
# contact包不要导入错误
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
@Configuration
@EnableSwagger2 //开启swagger2
public class SwaggerConfig {
//配置了swagger的Docket的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}
//配置swagger信息=apiInfo
private ApiInfo apiInfo(){
//contact 是作者信息
Contact contact = new Contact("冷山集", "https://blog.csdn.net/weixin_40597409", "[email protected]");
return new ApiInfo(
"冷山集的Swagger API文档",
"这是一个描述",
"v1.0",
"https://blog.csdn.net/weixin_40597409",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0", new ArrayList());
}
}
4. Escreva a classe Hello
código mostrado abaixo:
package com.cy.swagger.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String Hello(){
return "hello";
}
}
5. Execute o programa para verificar se o swagger foi iniciado com sucesso
Digite o link: http: // localhost: 8080 / swagger-ui.html
6. Interface de varredura de configuração de troca
Atualize o código da classe de configuração da seguinte maneira:
package com.cy.swagger.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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;
import java.util.ArrayList;
@Configuration
@EnableSwagger2 //开启swagger2
public class SwaggerConfig {
//配置了swagger的Docket的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
// RequestHandlerSelectors配置要扫描的接口方式
// .basePackage指定要扫描的包
// .any()全部扫描 .none()全部不扫描
// withClassAnnotation() 扫描类上的注解,参数是一个注解的反射对象(.class)
// withMethodAnnotation() 扫描类上的注解
.apis(RequestHandlerSelectors.basePackage("com.cy.swagger.controller"))
// .paths() 过滤
// .paths(PathSelectors.ant("/cy/**"))
.build();
}
//配置swagger信息=apiInfo
private ApiInfo apiInfo(){
//contact 是作者信息
Contact contact = new Contact("冷山集", "https://blog.csdn.net/weixin_40597409", "[email protected]");
return new ApiInfo(
"冷山集的Swagger API文档",
"这是一个描述",
"v1.0",
"https://blog.csdn.net/weixin_40597409",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0", new ArrayList());
}
}
Configure se deseja iniciar o Swagger
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
// .enable(false) 是否启动Swagger
.enable(false)
.select()
// RequestHandlerSelectors配置要扫描的接口方式
// .basePackage指定要扫描的包
// .any()全部扫描 .none()全部不扫描
// withClassAnnotation() 扫描类上的注解,参数是一个注解的反射对象(.class)
// withMethodAnnotation() 扫描类上的注解
.apis(RequestHandlerSelectors.basePackage("com.cy.swagger.controller"))
// .paths() 过滤
// .paths(PathSelectors.ant("/cy/**"))
.build();
}
Tópico estendido:
P: Só quero usar arrogância na produção e não usá-la na publicação. Como fazer?
Idéias:
1. Determine se é um sinalizador de ambiente de produção = false
2. Injete o parâmetro enable ()
1. Crie dois novos arquivos de configuração
2. Execute a configuração do arquivo A configuração
aqui é para selecionar qual ambiente ativar (aqui é a porta 8081 sob dev)
3. Defina o
código de configuração da seguinte forma:
package com.cy.swagger.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
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;
import java.util.ArrayList;
@Configuration
@EnableSwagger2 //开启swagger2
public class SwaggerConfig {
//配置了swagger的Docket的bean实例
@Bean
public Docket docket(Environment environment){
//设置要显示的swagger环境
Profiles profiles = Profiles.of("dev","test");
//获取项目的环境:
//通过environment.acceptsProfiles()判断是否处在自己设定的环境当中
boolean flag = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(flag)
.select()
.apis(RequestHandlerSelectors.basePackage("com.cy.swagger.controller"))
.build();
}
//配置swagger信息=apiInfo
private ApiInfo apiInfo(){
//contact 是作者信息
Contact contact = new Contact("冷山集", "https://blog.csdn.net/weixin_40597409", "[email protected]");
return new ApiInfo(
"冷山集的Swagger API文档",
"这是一个描述",
"v1.0",
"https://blog.csdn.net/weixin_40597409",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0", new ArrayList());
}
}
7. Configure o agrupamento
Adicione uma linha de código no arquivo de configuração:
.groupName("冷山集")
Reinicie a interface de login do servidor para ver:
Portanto, se você descobrir que o objeto Docket corresponde a um grupo, poderá adicionar o seguinte código à classe de configuração SwaggerConfig:
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("冷山集1");
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("冷山集2");
}
@Bean
public Docket docket3(){
return new Docket(DocumentationType.SWAGGER_2).groupName("冷山集3");
}
Reinicie a página de login do servidor para encontrar:
8. Configuração da classe de entidade
Crie um objeto Usuário no pacote pojo: o
código é o seguinte
package com.cy.swagger.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ApiModel("用户实体类")
public class User {
@ApiModelProperty("用户名")
private String username;
@ApiModelProperty("密码")
private String password;
}
Em seguida, edite HelloController, o código é o seguinte:
package com.cy.swagger.controller;
import com.cy.swagger.pojo.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String Hello(){
return "hello";
}
//只要接口中.返回值存在实体类,它就会被扫描到Swagger中
@PostMapping("/user")
public User user(){
return new User();
}
}
Reinicie o servidor:
Outros parâmetros de formatação de comentários:
@ApiParam ("nome do usuário")
@ApiOperation ("usuário da classe de controle hello")
@ApiOperation("hello控制类的user")
@PostMapping("/user2")
public User user2(@ApiParam("用户名") String username){
return new User();
}
9. Resumo
- Você pode adicionar informações de anotação a algumas interfaces ou atributos mais difíceis de entender por meio do Swagger
- Atualização em tempo real da documentação da interface
- Pode ser testado online
Observação:
Feche o Swagger quando ele for oficialmente lançado. (Por razões de segurança e para economizar memória em execução)