, 깨끗한 솔루션은 Spring 컨테이너가 동적으로 컨트롤러 방법로 ProjectVersion 인수를 주입 할 수 있도록, HandlerMethodArgumentResolver을 사용하는 것입니다 :
ProjectVersionArgumentResolver
클래스 :
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"));
}
}
봄 부팅 ApplicationLauncher 클래스 :
public class MyProjectApplicationLauncher extends WebMvcConfigurerAdapter {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver>
argumentResolvers) {
//add the new resolver
argumentResolvers.add(new MyMethodArgumentResolver());
}
public static void main(String[] args) {
SpringApplication.run(MyProjectApplicationLauncher.class, args);
}
}
ProjectVersion
클래스 : 사용자 지정 시리얼 라이저와
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;
}
}
예. 이것, 정확히 당신의 경우 참조하십시오 : http://stackoverflow.com/questions/7766791/serializing-enums-with-jackson –
'VERSION_1'을 전달하면 작동 할 것입니다. 내부 값을 전달하면 그럴 것입니다. 직접 사용자 지정 변환기를 만들어야합니다. –