一個根據URI定位到spring mvc映射代碼工具類
可以方便是根據URI定位到spring mvc的controller代碼,
@Controller
@RequestMapping("/admin/util")
public class SystemController {
private static final Logger log = LoggerFactory.getLogger(SystemController .class);
@RequestMapping(value = "/findUriMapMethod.do")
@ResponseBody
public String findUriMapMethod(HttpServletRequest request, HttpServletResponse response) {
final Env env = EnvUtils.getEnv();
final String uri = env.param("uri", request.getRequestURI());
return getHandler(request, uri, "GET");
}
private String getHandler(HttpServletRequest request, final String uri, String method) {
final Env env = EnvUtils.getEnv();
final String fMethod = method;
String[] beanNames = env.getApplicationContext().getBeanNamesForType(RequestMappingHandlerMapping.class);
log.info("RequestMappingHandlerMapping: {}", Arrays.toString(beanNames));
HttpServletRequestWrapper httpServletRequestWrapper = new HttpServletRequestWrapper(request) {
@Override
public String getRequestURI() {
/*String paramUri = super.getParameter("uri");
if(paramUri != null && !"".equals(paramUri.trim())) {
return paramUri;
}*/
return uri;
}
@Override
public StringBuffer getRequestURL() {
return new StringBuffer(super.getRequestURL().toString()
.replace(super.getRequestURI(), uri));
}
@Override
public String getServletPath() {
return super.getServletPath().replace(super.getRequestURI(), uri);
}
@Override
public String getMethod() {
if(fMethod == null || "".equals(fMethod)) {
return super.getMethod();
}
return fMethod;
}
};
StringBuilder uriMapMethod = new StringBuilder();
uriMapMethod.append(httpServletRequestWrapper.getRequestURI()).append(": [");
if(beanNames != null) {
for(String beanName : beanNames) {
log.info("beanName: {} ", beanName);
RequestMappingHandlerMapping mapping = env.getBean(beanName,
RequestMappingHandlerMapping.class);
try {
HandlerExecutionChain chain = mapping.getHandler(httpServletRequestWrapper);
if(chain != null) {
Object handler = chain.getHandler();
System.out.println(handler);
if(handler instanceof HandlerMethod) {
HandlerMethod hm = (HandlerMethod)handler;
log.info("{}:{}", hm.getBeanType().getName(),hm);
uriMapMethod.append(hm);
} else if(handler instanceof org.springframework.web.servlet.mvc.Controller) {
org.springframework.web.servlet.mvc.Controller hm = (org.springframework.web.servlet.mvc.Controller)handler;
Class<? extends org.springframework.web.servlet.mvc.Controller> hmClass = hm.getClass();
log.info("{}:{}", hmClass.getName(), hmClass.getDeclaredMethod("handleRequest",
HttpServletRequest.class, HttpServletResponse.class));
uriMapMethod.append(hmClass.getDeclaredMethod("handleRequest",
HttpServletRequest.class, HttpServletResponse.class));
} else {
uriMapMethod.append(handler.getClass().getName());
}
break;
}
} catch (HttpRequestMethodNotSupportedException e) {
return getHandler(httpServletRequestWrapper, uri, "POST");
} catch (Exception e) {
log.error("get uri mapping error.", e);
}
/*Map<RequestMappingInfo, HandlerMethod> mapMethods = mapping.getHandlerMethods();
if(mapMethods != null) {
Iterator<Entry<RequestMappingInfo, HandlerMethod>> iter = mapMethods.entrySet().iterator();
while (iter.hasNext()) {
Entry<RequestMappingInfo, HandlerMethod> entry = iter.next();
RequestMappingInfo key = entry.getKey();
HandlerMethod hm = (HandlerMethod)entry.getValue();
Method method = hm.getMethod();
log.info("{} : {}->{}", key.getPatternsCondition(), key, hm);
}
}*/
}
}
return uriMapMethod.append("]").toString();
}
}</pre> 來自:http://my.oschina.net/u/565351/blog/372300
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!