Spring Swagger 2 не работает, когда у меня есть пользовательский HandlerInterceptorAdapter - PullRequest
1 голос
/ 10 июля 2019

Я использую пружинную загрузку 1.5.3 вдоль side swagger 2.7.0 (не могу обновить, потому что более высокие версии не работают в IE), у меня все работает нормально, но когда я добавляю пользовательский HandlerInterceptorAdapter, он не работает, давая мне эту ошибку:

Невозможно прочитать свойство 'validatorUrl' со значением null springfox.js: 72

вот моя конфигурация swagger

@Configuration
@EnableSwagger2
public class SwaggerConfig {


    public Docket api() {
        Docket docket = new Docket(DocumentationType.SWAGGER_2).select()
            .apis(RequestHandlerSelectors
                .basePackage("net.guides.springboot2.springboot2swagger2.controller"))
            .paths(PathSelectors.regex("/.*"))
            .build().apiInfo(apiEndPointsInfo());
        docket.ignoredParameterTypes(HttpServletResponse.class, HttpServletRequest.class); // this didnt help
        return docket;
    }
    private ApiInfo apiEndPointsInfo() {
        return new ApiInfoBuilder().title("SWAT Rest API")
            .description("SWAT Rest API documentation")
            .contact(new Contact("xxx", "xxxx", "xxxxx"))
            .license("Apache 2.0")
            .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
            .version("5.2.2")
            .build();
    }

}

, а вотКонфиг, который дает мне трудное время

@Configuration
@Slf4j
public class SwatStaticResourceConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        log.debug("Adding static folders to serve images");
        // registry.addResourceHandler("/images/**").addResourceLocations("file:./images/");
        //registry.addResourceHandler("/docs/**").addResourceLocations("file:./docs/");
        registry.addResourceHandler("/images/**", "/docs/**").addResourceLocations("file:./images/", "file:./docs/");
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new SwatRequestInterceptor()); // if i disable this line than swagger is working fine
        super.addInterceptors(registry);
    }


}

на случай, если здесь нужен класс перехватчиков

@Slf4j
public class SwatRequestInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        Principal user = request.getUserPrincipal();
        if (user == null) {
            log.error("No user for request: " + request.getRequestURL().toString());
            return false;
        } else {
            log.debug("Got the following request: " + request.getMethod().toUpperCase() + " " + request.getRequestURL().toString() + ", FROM: " + user.getName());
            return true;
        }

    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        Principal user = request.getUserPrincipal();
        log.debug("Completed the following request: " + request.getMethod().toUpperCase() + " " + request.getRequestURL().toString() + ", FROM: " + user.getName());
        super.postHandle(request, response, handler, modelAndView);
    }
}
...