有两种情况可能导致Swagger无法正常打开
1.是配置了WebMvc导致的
2.是配置了消息转换器HttpMessageConverter导致的
1.项目配置了@EnableWebMvc的标签或继承了WebMvcConfirguactionSupport这个类的话,由于接管了整个Spring MVC则需要把Swagger的规则写入到registry
@Configuration
@EnableSwagger2
public class MyConfiguration extends WebMvcConfigurationSupport{
/**
* swagger ui资源映射
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("/swagger-resources/**")
.addResourceLocations("classpath:/META-INF/resources/swagger-resources/");
registry.addResourceHandler("/swagger/**")
.addResourceLocations("classpath:/META-INF/resources/swagger/");
registry.addResourceHandler("/v2/api-docs/**")
.addResourceLocations("classpath:/META-INF/resources/v2/api-docs/");
}
}
2.项目配置了HttpMessageConverter消息转换器 ,我们需要把Swagger的链接忽略掉不加入消息处理器中处理
@Component
public class ModelMessageConverter implements HttpMessageConverter<Object> {
@Override
public boolean canRead(Class<?> clazz, MediaType mediaType) {
// 获取全局Request
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// 忽略Swagger链接,不进入消息处理器中处理
if(request.getRequestURL().indexOf("api-docs")!=-1||request.getRequestURL().indexOf("webjars")!=-1||request.getRequestURL().indexOf("swagger")!=-1){
return false;
}
return true;
}
@Override
public boolean canWrite(Class<?> clazz, MediaType mediaType) {
// 获取全局Request
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// 忽略Swagger链接,不进入消息处理器中处理
if(request.getRequestURL().indexOf("api-docs")!=-1||request.getRequestURL().indexOf("webjars")!=-1||request.getRequestURL().indexOf("swagger")!=-1){
return false;
}
return true;
}
}