spring boot集成swagger2

spriing boot 2.0.4.RELEASE + springfox-swagger2 2.9.2

引入依赖

compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'

配置

@Configuration
@EnableSwagger2
public class Swagger2Configuration extends WebMvcConfigurationSupport {

    @Bean
    public Docket api(){
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.github.xx.pkg"))
                .paths(PathSelectors.ant("/api/**")).build();
    }


    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("内部接口")
                .contact(ApiInfo.DEFAULT_CONTACT)
                .version("1.0")
                .description("内部测试接口")
                .build();
    }


    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/doc.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

继承了WebMvcConfigurationSupport或加了@EnableWebMvc,就代表了spring boot 默认的注入处理机制都失效了如ViewResolver和静态资源文件访问

spring boot集成swagger问题

网上用以上步骤就可以访问swagger-ui.html的首页了,很不幸的是我配置的时候静态资源文件还是访问不了,但是swagger-ui.html页面的css,js都能正常加载,而其他页面的css和js访问的时候都是404

解决方案:

@Configuration
@EnableWebMvc
public class MvcWebConfig implements WebMvcConfigurer {

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }


    //如果采用这种方式,dispatcherServlet中只有一个ViewResolver:BeanNameViewResolver
    //因为使用的是JSP,需要使用InternalResourceViewResolver
    //因此会解析不了对应的JSP页面

    /**
     * 报错
     * o.s.web.servlet.DispatcherServlet        : Last-Modified value for [/login] is: -1
     * o.s.w.servlet.view.BeanNameViewResolver  : No matching bean found for view name 'login'
     * o.s.web.servlet.DispatcherServlet        : Could not complete request
     */
//    @Override
//    public void configureViewResolvers(ViewResolverRegistry registry) {
//        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
//        resolver.setPrefix("/WEB-INF/views/");
//        resolver.setSuffix(".jsp");
//        设置了优先级也不行
//        resolver.setOrder(Ordered.LOWEST_PRECEDENCE);
//        registry.viewResolver(resolver);
//    }

//  以这种方式填加ViewResolver,之后DispatcherServlet中viewResolvers就
//  BeanNameViewResolver和InternalResourceViewResolver
//  并且InternalResourceViewResolver的优先级比BeanNameViewResolver的更低
    @Bean
    public ViewResolver iRViewResolver(){
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        //设置优先级,值越低,优先级越高
        //让所有处理不了的VieResolver最后都交给InternalResourceViewResolver处理
        resolver.setOrder(Ordered.LOWEST_PRECEDENCE);
        return resolver;
    }


    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //指定了静态资源文件的位置
        registry.addResourceHandler("/static/**").addResourceLocations("/WEB-INF/resources/");
    }
}

你可能感兴趣的:(boot)