Здравствуйте. Разработываем
web
rest 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 В сети видел информацию по такой проблеме, но там именно на запуске через спринг бут были проблемы, а тут при запуске в томкате появляются такие ошибки.