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/");
}
}