@MaxLich
java developer

Почему у меня возникают ошибки с null в URL при обращении к сваггеру на томкате? Как это исправить?

Здравствуйте. Разработываем webrest api на java. Используем spring и sping boot для автоконфигурирования и локального запуска приложений. Также используем swagger для работы со своими REST API. Деплоим это в Apache Tomcat 9.0.x.
Версии библиотек ( из pom.xml):
<properties>
         <springframework.boot>2.1.2.RELEASE</springframework.boot>
        <springframework.version>5.1.4.RELEASE</springframework.version>

        <swagger.version>2.9.2</swagger.version>
        <java.version>11</java.version>

        <tomcat.version>9.0.14</tomcat.version>
        <postgresql.jdbc.version>42.2.5</postgresql.jdbc.version>

      </properties>


Раньше было одно приложение, теперь разделили его на три. Ошибки бывают такого вида:
[ERROR] 2019-08-01 10:07:48.791 [http-nio-8080-exec-7] RestExceptionHandler - No handler found for GET /my-project-rest/api/v1/null/swagger-resources/configuration/security

org.springframework.web.servlet.NoHandlerFoundException: No handler found for GET /my-project/api/v1/null/swagger-resources/configuration/security

	at org.springframework.web.servlet.DispatcherServlet.noHandlerFound(DispatcherServlet.java:1252) [spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE]


Пока временно решил это неким костыльным решением (бин в основной конфигурации):
@Bean
    public WebMvcConfigurer webMvcConfigurer() {
        return new WebMvcConfigurer() {

            //every controller without @DateTimeFormat
            @Override
            public void addFormatters(FormatterRegistry registry) {
                registry.addConverter(new LocalDateConverter(DATE_FORMAT_RU));
                registry.addConverter(new LocalDateTimeConverter(DATE_TIME_FORMAT_RU));
            }

            //Enable mappingJackson2HttpMessageConverter
            @Override
            public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
                converters.add(stringConverter());
                converters.add(mappingJackson2HttpMessageConverter());
            }

            //Enable matrix variable
            @Override
            public void configurePathMatch(PathMatchConfigurer configurer) {
                UrlPathHelper pathHelper = new UrlPathHelper();
                pathHelper.setRemoveSemicolonContent(false);
                configurer.setUrlPathHelper(pathHelper);
            }

            @Override
            public void addResourceHandlers(ResourceHandlerRegistry registry) {
                registry.addResourceHandler("swagger-ui.html")
                        .addResourceLocations("classpath:/META-INF/resources/swagger-ui.html");

                registry.addResourceHandler("/webjars/**")
                        .addResourceLocations("classpath:/META-INF/resources/webjars/");

                registry.addResourceHandler("/null/swagger-resources/**") // !!!!!
                        .addResourceLocations("classpath:/META-INF/resources/");

/*
                registry.addResourceHandler("swagger-ui.html")
                        .addResourceLocations("classpath:/META-INF/resources/");
                registry.addResourceHandler("/webjars/**")
                        .addResourceLocations("classpath:/META-INF/resources/webjars/");
*/
            }
        };
    }


Восклицательными знаками в комментарии пометил код, который добавил. Раньше было так, как закомментировано ниже в этом методе.

PS В сети видел информацию по такой проблеме, но там именно на запуске через спринг бут были проблемы, а тут при запуске в томкате появляются такие ошибки.
  • Вопрос задан
  • 516 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы