springmvc傳值幾種方式,獲取springmvc中所有的Controller

 2023-10-06 阅读 25 评论 0

摘要:2019獨角獸企業重金招聘Python工程師標準>>> @RequestMapping(value = "getUrlMapping") public ModelAndView getUrlMapping(HttpServletRequest request) {WebApplicationContext wc = getWebApplicationContext(request.getSession().getSer

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

@RequestMapping(value = "getUrlMapping") public ModelAndView  getUrlMapping(HttpServletRequest request) {WebApplicationContext wc = getWebApplicationContext(request.getSession().getServletContext());RequestMappingHandlerMapping rmhp = (RequestMappingHandlerMapping)wc.getBean("org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0");Map<RequestMappingInfo, HandlerMethod> map = rmhp.getHandlerMethods(); for (Iterator<RequestMappingInfo> iterator = map.keySet().iterator(); iterator.hasNext();) {RequestMappingInfo info = iterator.next();System.out.print(info.getConsumesCondition());System.out.print(info.getCustomCondition());System.out.print(info.getHeadersCondition());System.out.print(info.getMethodsCondition());System.out.print(info.getParamsCondition());System.out.print(info.getPatternsCondition());System.out.print(info.getProducesCondition());System.out.print("===");HandlerMethod method = map.get(info);System.out.print(method.getMethod().getName() + "--");System.out.print(method.getMethodAnnotation(RequestMapping.class).params()[0]);System.out.println();} return null;
} public WebApplicationContext getWebApplicationContext(ServletContext sc) { return WebApplicationContextUtils.getRequiredWebApplicationContext(sc);
}



代碼如上:

springmvc傳值幾種方式, 需要注意的是


RequestMappingHandlerMapping rmhp = (RequestMappingHandlerMapping)wc.getBean("org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0");

取RequestMappingHandlerMapping 的時候,如果集成了多個展示方式的話,RequestMappingHandlerMapping 對象會有多個,直接通過class是娶不到的。但是可以通過上面的方式獲取到。



controller可以調用controller嗎?

package com.wy.controller.system;import com.wy.util.JsonHelper;
import com.wy.vo.BaseForm;
import com.wy.vo.system.RequestToMethodItem;
import javassist.*;
import javassist.bytecode.CodeAttribute;
import javassist.bytecode.LocalVariableAttribute;
import javassist.bytecode.MethodInfo;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition;
import org.springframework.web.servlet.mvc.condition.RequestMethodsRequestCondition;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import org.springframework.web.servlet.support.RequestContextUtils;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Field;
import java.util.*;/*** 用戶Controller*/
@Controller
@RequestMapping("/sandbox")
public class SandboxController {private static final Logger LOGGER = Logger.getLogger(SandboxController.class);@RequestMapping("/index")public ModelAndView index(Long id, HttpServletRequest request, HttpServletResponse response) throws IOException, ClassNotFoundException, NotFoundException {ApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext());RequestMappingHandlerMapping handlerMapping = (RequestMappingHandlerMapping) ac.getBean("org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#1");List<RequestToMethodItem> requestToMethodItemList = loadRequestToMethodItem(handlerMapping);Map<String, Object> results = new HashMap<String, Object>();results.put("data", requestToMethodItemList);//生成jsonfor (RequestToMethodItem item:requestToMethodItemList){String url=item.getRequestUrl();String[] urls=url.split("//");}return new ModelAndView("/sandbox/index", results);}private List<RequestToMethodItem> loadRequestToMethodItem(RequestMappingHandlerMapping handlerMapping) {List<RequestToMethodItem> requestToMethodItemList = new ArrayList<RequestToMethodItem>();Map<RequestMappingInfo, HandlerMethod> map = handlerMapping.getHandlerMethods();for (Map.Entry<RequestMappingInfo, HandlerMethod> m : map.entrySet()) {RequestMappingInfo requestMappingInfo = m.getKey();HandlerMethod mappingInfoValue = m.getValue();RequestMethodsRequestCondition methodCondition = requestMappingInfo.getMethodsCondition();int methodsSize = requestMappingInfo.getMethodsCondition().getMethods().size();String requestType = methodsSize == 0 ? "GET" : methodCondition.getMethods().toString();String requestUrl = requestMappingInfo.getPatternsCondition().toString();String controllerName = mappingInfoValue.getBeanType().toString();String requestMethodName = mappingInfoValue.getMethod().getName();Class<?>[] methodParamTypes = mappingInfoValue.getMethod().getParameterTypes();Map methodParam = loadMethodParam(requestMappingInfo, mappingInfoValue);RequestToMethodItem item = new RequestToMethodItem(requestUrl, requestType, controllerName, requestMethodName, methodParamTypes, methodParam);requestToMethodItemList.add(item);}return requestToMethodItemList;}private Map loadMethodParam(RequestMappingInfo requestMappingInfo, HandlerMethod mappingInfoValue) {try {String controllerName = mappingInfoValue.getBeanType().getName();String requestMethodName = mappingInfoValue.getMethod().getName();return getMethodParamNames2(controllerName, requestMethodName);} catch (Exception e) {e.printStackTrace();}return null;}public Map getMethodParamNames2(String clazzName, String method) throws NotFoundException, ClassNotFoundException {Map map = new HashMap();ClassPool pool = ClassPool.getDefault();pool.insertClassPath(new ClassClassPath(this.getClass()));CtClass cc = pool.get(clazzName);CtMethod cm = cc.getDeclaredMethod(method);CtClass[] parameterTypes = cm.getParameterTypes();MethodInfo methodInfo = cm.getMethodInfo();CodeAttribute codeAttribute = methodInfo.getCodeAttribute();LocalVariableAttribute attr = (LocalVariableAttribute) codeAttribute.getAttribute(LocalVariableAttribute.tag);if (attr == null)throw new RuntimeException(cc.getName());String[] paramNames = new String[cm.getParameterTypes().length];int pos = Modifier.isStatic(cm.getModifiers()) ? 0 : 1;for (int i = 0; i < paramNames.length; i++) {paramNames[i] = attr.variableName(i + pos);String name = attr.variableName(i + pos);Class c = Class.forName(parameterTypes[i].getName());Class superClass = c.getSuperclass();if (null != superClass) {if (BaseForm.class.getName().equals(c.getSuperclass().getName())) {Map<String, String> map2 = getClassFields(c, true);map.putAll(map2);continue;}}if (HttpServletRequest.class.getName().equals(c.getName())) {continue;}if (HttpServletResponse.class.getName().equals(c.getName())) {continue;}if (BindingResult.class.getName().equals(c.getName())) {continue;}if (BaseForm.class.getName().equals(c.getName())) {Map<String, String> map2 = getClassFields(BaseForm.class, false);map.putAll(map2);continue;}map.put(name, parameterTypes[i].getSimpleName());}return map;}/*** 獲取類實例的屬性值** @param clazz              類名* @param includeParentClass 是否包括父類的屬性值* @return 類名.屬性名=屬性類型*/public static Map<String, String> getClassFields(Class clazz, boolean includeParentClass) {Map<String, String> map = new HashMap<String, String>();Field[] fields = clazz.getDeclaredFields();for (Field field : fields) {map.put(field.getName(), field.getType().getSimpleName());}if (includeParentClass)getParentClassFields(map, clazz.getSuperclass());return map;}/*** 獲取類實例的父類的屬性值** @param map   類實例的屬性值Map* @param clazz 類名* @return 類名.屬性名=屬性類型*/private static Map<String, String> getParentClassFields(Map<String, String> map, Class clazz) {Field[] fields = clazz.getDeclaredFields();for (Field field : fields) {map.put(field.getName(), field.getType().getSimpleName());}if (clazz.getSuperclass() == null) {return map;}//getParentClassFields ( map, clazz.getSuperclass ( ) );return map;}}



springmvc獲取前臺數據,轉載于:https://my.oschina.net/u/557580/blog/534699

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/118601.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息