From d3bf894b4bcd8842278309c693f43729fee1e2a8 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 16 Oct 2025 15:21:24 +0000 Subject: [PATCH] Migrate from Java 8 to Java 11 with Spring Boot 2.7.18 - Updated java.version from 1.8 to 11 in pom.xml - Upgraded Spring Boot parent from 2.1.4.RELEASE to 2.7.18 - Upgraded Springfox from 2.9.2 to 3.0.0 (springfox-boot-starter) for Spring Boot 2.6+ compatibility - Updated test dependencies from JUnit 4 to JUnit 5 - Added BeanPostProcessor workaround for Springfox 3.0.0 compatibility with Spring Boot 2.6+ - Added path matching strategy configuration in application.yml for Springfox compatibility All tests passing with the new configuration. Co-Authored-By: Jaime Mizrachi --- pom.xml | 13 ++---- .../bankapp/config/ApplicationConfig.java | 43 +++++++++++++++++++ src/main/resources/application.yml | 3 ++ .../bankapp/BankingApplicationTests.java | 5 +-- 4 files changed, 51 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index 647e3ce..8587c47 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 @@ -15,7 +15,7 @@ Bank App Spring Boot Project - 1.8 + 11 @@ -53,13 +53,8 @@ io.springfox - springfox-swagger2 - 2.9.2 - - - io.springfox - springfox-swagger-ui - 2.9.2 + springfox-boot-starter + 3.0.0 org.springframework.boot 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..4171815 100644 --- a/src/main/java/com/coding/exercise/bankapp/config/ApplicationConfig.java +++ b/src/main/java/com/coding/exercise/bankapp/config/ApplicationConfig.java @@ -1,13 +1,23 @@ 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.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider; +import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @@ -28,4 +38,37 @@ private ApiInfo apiInfo() { .description("API for Banking Application.") .version("1.0.0").build(); } + + @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 diff --git a/src/test/java/com/coding/exercise/bankapp/BankingApplicationTests.java b/src/test/java/com/coding/exercise/bankapp/BankingApplicationTests.java index 803c91d..6b76be1 100644 --- a/src/test/java/com/coding/exercise/bankapp/BankingApplicationTests.java +++ b/src/test/java/com/coding/exercise/bankapp/BankingApplicationTests.java @@ -1,11 +1,8 @@ package com.coding.exercise.bankapp; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; -@RunWith(SpringRunner.class) @SpringBootTest public class BankingApplicationTests {