Since you need to pass an argument (for each request) to the Controller method, a clean solution is to use HandlerMethodArgumentResolver , so that the Spring Container can dynamically inject your ProjectVersion argument into the Controller method , as shown below:
ProjectVersionArgumentResolver class:
public class ProjectVersionArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter methodParameter) { return methodParameter.getParameterType().equals(ProjectVersion.class); } @Override public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception { return ProjectVersion.fromString(nativeWebRequest.getParameter("version")); } }
Spring-boot class ApplicationLauncher:
public class MyProjectApplicationLauncher extends WebMvcConfigurerAdapter { @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
ProjectVersion class:
public enum ProjectVersion { //add your existing code //Add fromString method to convert string to enum public static ProjectVersion fromString(String input) { for (ProjectVersion projectVersion : ProjectVersion.values()) { if (projectVersion.version.equals(input)) { return projectVersion; } } return null; } }
source share