有兩種情況可能導致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;
}
}