大部分集成swagger項目,都是在項目中修改配置文件,新建swagger配置類。其實更合適的做法是新建一個swagger模塊,需要加入swagger的模塊只要引入這個模塊就可以了。
1. 在需要引入swagger模塊的模塊,pom文件引入swagger依賴
com.imooc imooc-single-mvc-swagger 0.0.1-SNAPSHOT
2. 在類路徑下面resource文件夾下,新建swagger.properties
swagger.basePackage=com.imooc.web.controller
swagger.title=mytitle
3.在web.xml中,加入前端控制器的swagger配置。
org.springframework.web.servlet.DispatcherServlet
(注意,DispatcherServlet的url-pattern不能是*.action)
classpath:spring/springmvc.xml,classpath:spring/springmvc-swagger.xml
關于如何新建一個swagger模塊,可以參考以下的鏈接
https://my.oschina.net/wangmengjun/blog/907679
本人做了如下修改,新建了SwaggerInfo類,去讀取配置文件swagger.properties里的包掃描路徑和title等一些需要定制化的數據,因為各個模塊的屬性是不一樣的;
SwaggerConfig: 會去swaggerInfo里拿包路徑。
@Bean
??? public Docket controllerApi() {
??????? Docket docket = new Docket(DocumentationType.SWAGGER_2)
??????????????? .groupName(swaggerInfo.getGroupName())
??????????????? .apiInfo(apiInfo());
??????? ApiSelectorBuilder builder = docket.select();
??????? if (!StringUtils.isEmpty(swaggerInfo.getBasePackage())) {
??????????? builder = builder.apis(RequestHandlerSelectors.basePackage(swaggerInfo.getBasePackage()));
??????? }
??????? if (!StringUtils.isEmpty(swaggerInfo.getAntPath())) {
??????????? builder = builder.paths(PathSelectors.ant(swaggerInfo.getAntPath()));
??????? }
??????? return builder.build();
??? }
最后總結一下,擴展swagger模塊的做法體現了軟件設計原則中的開閉原則,對擴展開放,對修改關閉。在實踐中或多或少會運用到一些設計原則,只是沒意識到,還未上升到理論高度,逐漸積累中。