SSM三大框架整合Springfox(Swagger2)步驟以及遇到的一些問題
阿新 • • 發佈:2019-02-07
需求是在已有的Spring+SpringMVC+Mybatis的專案中整合Springfox(Swagger2)。
在網上查看了非常多的部落格,均沒有解決問題。經過一天多的摸索,總算是成功的完成了整合。現在將具體的步驟記錄下來,希望能給有需求的朋友提供參考。
注意:此篇文章僅講解整合完成SSM三大框架以後整合Springfox(Swagger2)
1、在maven的pom檔案中引入springfox的依賴
<!--springfox的核心jar包-->
<dependency>
<groupId>io.springfox</groupId >
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<!--springfox-ui的jar包(裡面包含了swagger的介面靜態檔案)-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
<!--springfox依賴的jar包;如果你的專案中已經集成了無需重複-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
2、在原始碼目錄下建立一個單獨的package,然後建立SwaggerConfig.java檔案
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.builders.ApiInfoBuilder;
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;
/*重要!如果你的專案引入junit測試,此處需要使用@WebAppConfiguration,如果沒有使用junit使用@Configuration(很多的部落格都沒有註明這個問題,為此我花了非常多的時間解決問題)*/
@WebAppConfiguration
@EnableSwagger2//重要!
@EnableWebMvc
@ComponentScan(basePackages = "com.XXXXX.control")//掃描control所在的package請修改為你control所在package
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("XXX專案介面文件")
.description("XXX專案介面測試")
.version("1.0.0")
.termsOfServiceUrl("")
.license("")
.licenseUrl("")
.build();
}
}
3、在springMVC的配置檔案中配置swagger
<!--將靜態資源交由預設的servlet處理-->
<mvc:default-servlet-handler />
<!--向容器自動注入配置-->
<context:annotation-config />
<!--自動掃描,使springMVC認為包下用了@controller註解的類是控制器-->
<context:component-scan base-package="com.XXXXX"/>
<!--重要!將你的SwaggerConfig配置類注入-->
<bean class="com.XXXXX.config.SwaggerConfig"/>
<!--重要!配置swagger資源不被攔截-->
<mvc:resources mapping="swagger-ui.html" location="classpath:/META-INF/resources/" />
<mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/" />
4、修改web.xml檔案中配置所有的請求都經DispatcherServlet處理
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
注意:這個地方必須配置,如果你配置的是*.XXX的形式會出現api-docs訪問出錯,這就會導致swagger-ui找不到api的有效路徑。使swagger無法正常工作
5、controller的配置,這裡我只做簡單的配置測試swagger是否正常工作
@Controller
@RequestMapping("/user")
@Api(value = "/user", tags = "User介面")
public class UserController {
private static Logger logger = Logger.getLogger(UserController.class);
@Autowired
private UserService userService;
@RequestMapping(value = "/getUser/{id}",method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "根據id獲取使用者資訊", notes = "根據id獲取使用者資訊", httpMethod = "GET", response = User.class)
public ResponseEntity<User> getUser(@PathVariable int id){
User user = userService.getUserById(id);
logger.info("controller:"+user);
return ResponseEntity.ok(user);
}
}
註解的詳細資訊移步:傳送門
執行:我這裡使用Tomcat8.5.16和jetty9.4.6都能夠正常的工作