diff --git a/src/main/java/com/nexacro/spring/resolve/NexacroRequestMappingHandlerAdapter.java b/src/main/java/com/nexacro/spring/resolve/NexacroRequestMappingHandlerAdapter.java new file mode 100644 index 0000000..8e810fa --- /dev/null +++ b/src/main/java/com/nexacro/spring/resolve/NexacroRequestMappingHandlerAdapter.java @@ -0,0 +1,41 @@ +package com.nexacro.spring.resolve; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; + +public class NexacroRequestMappingHandlerAdapter extends RequestMappingHandlerAdapter { + @Override + public void afterPropertiesSet() { + super.afterPropertiesSet(); + + List argumentResolvers = getArgumentResolvers(); + + if (argumentResolvers != null) { + List tempArgumentResolvers = new ArrayList(argumentResolvers); + + int nexacroMethodArgumentResolverIndex = getNexacroMethodArgumentResolverIndex(tempArgumentResolvers); + HandlerMethodArgumentResolver nexacroMethodArgumentResolver = tempArgumentResolvers.remove(nexacroMethodArgumentResolverIndex); + if (nexacroMethodArgumentResolver != null) { + tempArgumentResolvers.add(0, nexacroMethodArgumentResolver); + setArgumentResolvers(tempArgumentResolvers); + } + } + } + + /** + * getNexacroResolverIndex + * @param argumentResolverList + * @return + */ + private int getNexacroMethodArgumentResolverIndex(List argumentResolverList) { + for (int i = 0, size = argumentResolverList.size(); i < size; i++) { + if (argumentResolverList.get(i) instanceof NexacroMethodArgumentResolver) { + return i; + } + } + return -1; + } +}