1. 程式人生 > >SSM三大框架整合Springfox(Swagger2)步驟以及遇到的一些問題

SSM三大框架整合Springfox(Swagger2)步驟以及遇到的一些問題

需求是在已有的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都能夠正常的工作

這裡寫圖片描述