From 4204c22c00f15908c08cda6af3bee71e69eab4a6 Mon Sep 17 00:00:00 2001 From: ParkSeongMin Date: Wed, 6 Apr 2016 09:45:42 +0900 Subject: [PATCH] =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../servicelayout/RequestMappingView.java | 116 ++++++++++++------ .../spring/servicelayout/ServiceLayout.java | 103 ++++++++-------- 2 files changed, 135 insertions(+), 84 deletions(-) diff --git a/src/test/java/com/nexacro/spring/servicelayout/RequestMappingView.java b/src/test/java/com/nexacro/spring/servicelayout/RequestMappingView.java index 40434c3..a5df1cb 100644 --- a/src/test/java/com/nexacro/spring/servicelayout/RequestMappingView.java +++ b/src/test/java/com/nexacro/spring/servicelayout/RequestMappingView.java @@ -1,37 +1,81 @@ -package com.nexacro.spring.servicelayout; - -import java.util.Map; - -import org.springframework.mock.web.MockServletContext; -import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; -import org.springframework.web.context.support.XmlWebApplicationContext; -import org.springframework.web.method.HandlerMethod; -import org.springframework.web.servlet.mvc.method.RequestMappingInfo; -import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; - -public class RequestMappingView { - public static void main(String[] args) { - - MockServletContext servletContext = new MockServletContext(); - /* JavaConfig 설정시 */ - // AnnotationConfigWebApplicationContext wac = new - // AnnotationConfigWebApplicationContext(); - // wac.setServletContext(servletContext); - // wac.register(WebConfig.class); - - /* xml config 설정시 */ - XmlWebApplicationContext wac = new XmlWebApplicationContext(); - wac.setServletContext(servletContext); - wac.setConfigLocations(new String[] { "com/nexacro/spring/servicelayout/application-config.xml" }); - wac.refresh(); - - RequestMappingHandlerMapping mapping = wac.getBean(RequestMappingHandlerMapping.class); - Map map = mapping.getHandlerMethods(); - - for (final Map.Entry entry : map.entrySet()) { - System.out.println(entry.getKey().getPatternsCondition().getPatterns() + " : " + entry.getValue().getMethod()); - } - - wac.close(); - } +package com.nexacro.spring.servicelayout; + +import java.lang.annotation.Annotation; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.LocalVariableTableParameterNameDiscoverer; +import org.springframework.core.ParameterNameDiscoverer; +import org.springframework.mock.web.MockServletContext; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; +import org.springframework.web.context.support.XmlWebApplicationContext; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.mvc.method.RequestMappingInfo; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; + +@Configuration +@ComponentScan(basePackages={"com.nexacro.spring.servicelayout", "com.nexacro.spring.resolve"}) +@EnableWebMvc +public class RequestMappingView { + public static void main(String[] args) { + + MockServletContext servletContext = new MockServletContext(); + /* JavaConfig 설정시 */ + AnnotationConfigWebApplicationContext wac = new AnnotationConfigWebApplicationContext(); + wac.setServletContext(servletContext); + wac.register(RequestMappingView.class); + wac.refresh(); + + /* xml config 설정시 */ +// XmlWebApplicationContext wac = new XmlWebApplicationContext(); +// wac.setServletContext(servletContext); +// wac.setConfigLocations(new String[] { "com/nexacro/spring/servicelayout/application-config.xml" }); +// wac.refresh(); + + ParameterNameDiscoverer parameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer(); + + RequestMappingHandlerMapping mapping = wac.getBean(RequestMappingHandlerMapping.class); + Map map = mapping.getHandlerMethods(); + + for (final Map.Entry entry : map.entrySet()) { + + RequestMappingInfo requestMappingInfo = entry.getKey(); + HandlerMethod handlerMethod = entry.getValue(); + System.out.println(handlerMethod.getMethod().getName()); + + String[] parameterNames = parameterNameDiscoverer.getParameterNames(handlerMethod.getMethod()); + + Annotation[][] paramAnnotaions = handlerMethod.getMethod().getParameterAnnotations(); + Set parameters = new HashSet(); + for (int i = 0; i < paramAnnotaions.length; i++) { + Annotation[] annotations = paramAnnotaions[i]; + for (int j = 0; j < annotations.length; j++) { + Annotation annotation = annotations[j]; + + System.out.println("\t"+parameterNames[i]); + + if (annotation instanceof RequestParam) { + parameters.add(parameterNames[i]); + } + } + } + + Set patterns = requestMappingInfo.getPatternsCondition() + .getPatterns(); + for (String pattern : patterns) { + ServiceLayout api = new ServiceLayout(pattern, requestMappingInfo.getMethodsCondition().getMethods(), parameters); +// serviceLayouts.add(api); + System.out.println(api.toString()); + } + +// System.out.println(entry.getKey().getPatternsCondition().getPatterns() + " : " + entry.getValue().getMethod()); + } + + wac.close(); + } } \ No newline at end of file diff --git a/src/test/java/com/nexacro/spring/servicelayout/ServiceLayout.java b/src/test/java/com/nexacro/spring/servicelayout/ServiceLayout.java index ebf9579..2fbf4c7 100644 --- a/src/test/java/com/nexacro/spring/servicelayout/ServiceLayout.java +++ b/src/test/java/com/nexacro/spring/servicelayout/ServiceLayout.java @@ -1,48 +1,55 @@ -package com.nexacro.spring.servicelayout; - -import java.util.Set; - -import org.springframework.web.bind.annotation.RequestMethod; - -public class ServiceLayout { - - private String pattern; - private Set methods; - private Set parameters; - - public ServiceLayout(String pattern, Set methods, - Set parameters) { - this.pattern = pattern; - this.methods = methods; - this.parameters = parameters; - } - - public String getPattern() { - return pattern; - } - - public Set getMethods() { - return methods; - } - - public Set getParameters() { - return parameters; - } - - public String getParameterString() { - StringBuilder builder = new StringBuilder(); - - int loopCnt = 1; - for (String parameter : parameters) { - builder.append(parameter + "="); - if (loopCnt < parameters.size()) { - builder.append("&"); - } - - loopCnt++; - } - - return builder.toString(); - } - -} +package com.nexacro.spring.servicelayout; + +import java.util.Set; + +import org.springframework.web.bind.annotation.RequestMethod; + +public class ServiceLayout { + + private String pattern; + private Set methods; + private Set parameters; + + public ServiceLayout(String pattern, Set methods, + Set parameters) { + this.pattern = pattern; + this.methods = methods; + this.parameters = parameters; + } + + public String getPattern() { + return pattern; + } + + public Set getMethods() { + return methods; + } + + public Set getParameters() { + return parameters; + } + + public String getParameterString() { + StringBuilder builder = new StringBuilder(); + + int loopCnt = 1; + for (String parameter : parameters) { + builder.append(parameter + "="); + if (loopCnt < parameters.size()) { + builder.append("&"); + } + + loopCnt++; + } + + return builder.toString(); + } + + @Override + public String toString() { + return "ServiceLayout [getPattern()=" + getPattern() + + ", getMethods()=" + getMethods() + ", getParameters()=" + + getParameters() + "]"; + } + +}