2019独角兽企业重金招聘Python工程师标准>>>
@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 mapMethods = mapping.getHandlerMethods();
if(mapMethods != null) {
Iterator> iter = mapMethods.entrySet().iterator();
while (iter.hasNext()) {
Entry 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();
}
}
可以方便是根据URI定位到spring mvc的controller代码,