From 1d5c36220e122d204db5bb2c809efe8d8a4782d3 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 13 Oct 2025 23:44:54 +0000 Subject: [PATCH] Upgrade Spring Boot from 2.1.4.RELEASE to 2.7.18 - Updated Spring Boot parent version in pom.xml to 2.7.18 - Upgraded Springfox from 2.9.2 to 3.0.0 (springfox-boot-starter) - Added junit-vintage-engine for JUnit 4 compatibility - Updated Swagger configuration to restrict scanning to controller package - Added SpringfoxConfig BeanPostProcessor to handle Spring Boot 2.6+ compatibility - Configured Spring MVC path matching strategy to ant_path_matcher for Springfox compatibility - Note: Swagger UI URL changed from /swagger-ui.html to /swagger-ui/ All tests pass and application runs successfully on Java 8. Co-Authored-By: Jaime Mizrachi --- pom.xml | 22 ++++---- .../bankapp/config/ApplicationConfig.java | 5 +- .../bankapp/config/SpringfoxConfig.java | 52 +++++++++++++++++++ src/main/resources/application.yml | 3 ++ 4 files changed, 70 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/coding/exercise/bankapp/config/SpringfoxConfig.java diff --git a/pom.xml b/pom.xml index 647e3ce..96fca03 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.1.4.RELEASE + 2.7.18 com.coding.exercise @@ -51,16 +51,11 @@ lombok true - - io.springfox - springfox-swagger2 - 2.9.2 - - - io.springfox - springfox-swagger-ui - 2.9.2 - + + io.springfox + springfox-boot-starter + 3.0.0 + org.springframework.boot spring-boot-starter-test @@ -71,6 +66,11 @@ spring-security-test test + + org.junit.vintage + junit-vintage-engine + test + diff --git a/src/main/java/com/coding/exercise/bankapp/config/ApplicationConfig.java b/src/main/java/com/coding/exercise/bankapp/config/ApplicationConfig.java index 67845f3..003ab7b 100644 --- a/src/main/java/com/coding/exercise/bankapp/config/ApplicationConfig.java +++ b/src/main/java/com/coding/exercise/bankapp/config/ApplicationConfig.java @@ -2,9 +2,11 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; @@ -12,13 +14,14 @@ @Configuration @EnableSwagger2 -public class ApplicationConfig { +public class ApplicationConfig implements WebMvcConfigurer { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() + .apis(RequestHandlerSelectors.basePackage("com.coding.exercise.bankapp.controller")) .paths(PathSelectors.any()) .build(); } diff --git a/src/main/java/com/coding/exercise/bankapp/config/SpringfoxConfig.java b/src/main/java/com/coding/exercise/bankapp/config/SpringfoxConfig.java new file mode 100644 index 0000000..d207c32 --- /dev/null +++ b/src/main/java/com/coding/exercise/bankapp/config/SpringfoxConfig.java @@ -0,0 +1,52 @@ +package com.coding.exercise.bankapp.config; + +import java.lang.reflect.Field; +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.util.ReflectionUtils; +import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; + +import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider; +import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider; + +@Configuration +public class SpringfoxConfig { + + @Bean + public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() { + return new BeanPostProcessor() { + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) { + customizeSpringfoxHandlerMappings(getHandlerMappings(bean)); + } + return bean; + } + + private void customizeSpringfoxHandlerMappings(List mappings) { + List copy = mappings.stream() + .filter(mapping -> mapping.getPatternParser() == null) + .collect(Collectors.toList()); + mappings.clear(); + mappings.addAll(copy); + } + + @SuppressWarnings("unchecked") + private List getHandlerMappings(Object bean) { + try { + Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); + field.setAccessible(true); + return (List) field.get(bean); + } catch (IllegalArgumentException | IllegalAccessException e) { + throw new IllegalStateException(e); + } + } + }; + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index aa3d490..4dcfb25 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -9,3 +9,6 @@ spring: h2: console: enabled: true + mvc: + pathmatch: + matching-strategy: ant_path_matcher