忽略各種曆史、原因。。。。
1.引入項目依賴。
<!-- Swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
2.建立SwaggerConfig類
目錄結構如下
編寫配置内容:
package com.rx.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.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @date: 2019/7/15 10:23
* @author: ruixiang
* @description: swagger得配置類
*/
@Configuration
@EnableSwagger2 //開啟Swagger的自動配置
public class SwaggerConfig {
@Bean
public Docket createRestApi(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select().apis(RequestHandlerSelectors.basePackage("com.rx.controller")) // 根據個人項目配置掃描Controller包
.paths(PathSelectors.any()).build();
}
private ApiInfo apiInfo(){
//Swagger頁面上的個人定制配置
return new ApiInfoBuilder().title("瑞祥的Swagger2-UI")
.description("綜合管理Api文檔服務")
.termsOfServiceUrl("http://swagger.io/")
.contact(new Contact("小二", "https://blog.csdn.net/weixin_42422694",
"[email protected]"))
.version("1.0")
.build();
}
}
3.編寫Controller内容測試
這裡不在描述Swagger注解的使用方法,本文隻關心配置問題。
@Api("使用者登陸注冊")
@CrossOrigin
@RestController
@RequestMapping("/user")
public class UserLogin {
@Autowired
private UserLoginServcie servcie;
/**
* 使用者注冊方法
* @param user 使用者對象
* @return
*/
@ApiOperation("注冊方法")
@PostMapping(value = "/register")
public String register(User user){
try{
servcie.register(user);
return "注冊成功!";
}catch(Exception e){
e.printStackTrace();
return null;
}
}
/**
* 登入
* @param user
* @return
*/
@ApiOperation("登陸")
@GetMapping(value = "/login")
public String login(User user){
try{
servcie.register(user);
return "登入成功!";
}catch(Exception e){
e.printStackTrace();
return null;
}
}
請求swagger位址測試:http://127.0.0.1:8080/swagger-ui.html
4.關于整合的錯誤點。
- 通路連結控制台提示no mapping for GET/swagger-resources,請檢查建立的SwaggerConfig類是否使用@EnableSwagger2注解。
- 通路連結發生404,控制台提示No mapping for GET /swagger-ui.html,添加自定義配置類繼承WebMvcConfigurationSupport重寫addResourceHandlers方法,添加資源控制器:
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
-
連結可以通路,但是通路時控制台報出NumberExceptionL:For input String:“”,報錯的原因是因為swagger2的bug産生的,目前正在修複中,實體類中如果接收類型為Integer類型,使用@ApiModelProperty注解時,如果沒用使用example參數,就會出錯。解決辦法分為兩種
(1).回退版本為1.X。
(2).使用example參數指定。
@Data
public class User implements Serializable {
@ApiModelProperty("姓名")
private String name;
@ApiModelProperty(value = "年齡")
private Integer age;
@ApiModelProperty("郵箱")
private String email;
@ApiModelProperty("密碼")
private String password;
}
5.項目中配置了自定義攔截器之後無法通路
在放行路徑的時候需要把swagger資源路徑放行
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}