Swagger在Spring Boot項目中不能正常打開解決方法

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章