有时候,想查看应用请求对应的ur和方法l情况,可以用RequestMappingHandlerMapping这个类来处理,下面这个方法可以解决:
package cn.pclby.controller.util; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; /** * 查看项目所有URL对应的Controller和方法 */ @Controller public class Url2ControllerUtils { @Autowired private RequestMappingHandlerMapping requestMappingHandlerMapping; @RequestMapping(value = "/admin/util/url2controller") @ResponseBody public void list(HttpServletResponse response) { StringBuilder sb = new StringBuilder(); sb.append("URL").append("--").append("Class").append("--").append("Function").append('\n'); Map<RequestMappingInfo, HandlerMethod> map = requestMappingHandlerMapping.getHandlerMethods(); for (Map.Entry<RequestMappingInfo, HandlerMethod> m : map.entrySet()) { RequestMappingInfo info = m.getKey(); HandlerMethod method = m.getValue(); sb.append(info.getPatternsCondition()).append("--"); sb.append(method.getMethod().getDeclaringClass()).append("--"); sb.append(method.getMethod().getName()).append('\n'); } PrintWriter writer = null; try { writer = response.getWriter(); writer.print(sb.toString()); } catch (IOException e) { e.printStackTrace(); } finally { writer.close(); } } }
需要注意下面几点:
(1)RequestMappingHandlerMapping这个类在程序中用@Autowired来自动装配得到对象,但实际上,spring容器是没有注入到这个bean的,这个可以用applicationContext.getBean("requestMappingHandlerMapping")方法来验证得到。
(2)RequestMappingHandlerMapping这个类的对象,只能在controller层用,并且要在申明了@RequestMapping的方法里面用,从RequestMappingHandlerMapping的源码注释里面可以看出:
/** * Creates {@link RequestMappingInfo} instances from type and method-level * {@link RequestMapping @RequestMapping} annotations in * {@link Controller @Controller} classes. * * @author Arjen Poutsma * @author Rossen Stoyanchev * @since 3.1 */ public class RequestMappingHandlerMapping extends RequestMappingInfoHandlerMapping { //省略 }
(3)其它一般用@Autowired来自动装配得到对象的bean,前提是要在spring容器里面注入,这个RequestMappingHandlerMapping不用注入,估计是spring里springMVC自己的机制引起的。
相关推荐
- 映射表包含了所有使用`@RequestMapping`注解的方法的详细信息。 - 如果找到匹配项,将返回一个`HandlerExecutionChain`对象,其中包含了要执行的处理器(通常是`HandlerMethod`对象,代表一个`@Controller`中的...
`RequestMappingHandlerMapping`会根据这些注解信息建立请求URL到处理器方法的映射关系。通过这种方式,我们可以实现更加灵活和精细的路由控制。 3. **BeanNameUrlHandlerMapping** `BeanNameUrlHandlerMapping`是...
2. 获取`RequestMappingHandlerMapping`并调用`registerMapping`方法,将`RequestMappingInfo`与处理方法的bean关联。 3. 确保处理请求的方法所在的类被Spring容器管理,可以通过`@Component`或`@Bean`实现。 通过...
在实际使用中,通常会使用注解@Controller来标记一个类为Controller,并用@RequestMapping来映射请求路径到具体的方法上。 HandlerInterceptor拦截器可以在请求到达Controller之前或之后进行一些处理。比如,可以在...
当我们使用 @PathVariable 注解来获取 URL 中的参数时,如果参数带有点号(.),Spring 会自动截断参数,例如: * 访问 http://127.0.0.1:8080/param/hehe 返回 hehe * 访问 ...
`RequestMappingHandlerMapping`负责将URL映射到控制器方法,而`RequestMappingHandlerAdapter`则是一个适配器,用于处理请求并调用合适的控制器方法。 `RequestMappingHandlerAdapter`的`messageConverters`属性是...
3. 创建Spring MVC配置类:使用Java配置代替XML配置,定义RequestMappingHandlerMapping、RequestMappingHandlerAdapter等关键组件。 4. 模型-视图-控制器(MVC)设计模式:创建Controller类,定义处理HTTP请求的...
本教程将深入探讨Spring在Web应用下的使用方法。 一、Spring MVC概述 Spring Web的核心是Spring MVC(Model-View-Controller)框架,它提供了一个分离关注点的架构,使开发者可以轻松地处理HTTP请求、业务逻辑和...
通过使用 RequestMappingHandlerMapping,我们可以获取所有的控制器映射路径及其对应的方法。 下面是一个示例代码,演示如何获取Spring MVC中所有的RequestMapping及其对应的方法和参数: ```java @RequestMapping...
接着,我们可以利用`RequestMappingHandlerMapping`的`registerMapping`方法,将`RequestMappingInfo`和处理方法关联起来: ```java this.mappingRegistry.registerMapping(mapping, "testRequest"); ``` 这里,`...
`RequestMappingHandlerMapping` 负责将请求映射到处理方法。你可以通过`ApplicationContext` 获取该bean,并调用 `registerMapping()` 方法注册自定义的映射。例如: ```java @Autowired private ...
在SpringBoot应用中,Controller是处理HTTP请求的核心组件,通常我们会在类上使用@RestController或@Controller注解,并在方法上添加@RequestMapping等注解来定义URL路径和处理逻辑。然而,SpringBoot允许我们动态地...
Spring MVC内置了多种HandlerAdapter,如RequestMappingHandlerAdapter,能够处理使用@RequestMapping注解的方法。 在Controller处理完请求后,ModelAndView对象会被HandlerAdapter传递给ViewResolver(视图解析器...
RequestMappingHandlerMapping mappingHandlerMapping = context.getBean(RequestMappingHandlerMapping.class); ``` 3. 通过反射获取控制器类的方法: ```java Method method2 = InjectToController.class....
ViewResolver 解析视图,例如 InternalResourceViewResolver 可以将视图名解析为 JSP 文件路径,然后使用 RequestDispatcher 的 forward 或 include 方法来渲染视图。 HandlerExceptionResolver 用于处理 ...
当你在控制器方法上使用`@ResponseBody`注解时,Spring会找到合适的`HttpMessageConverter`来处理返回的对象。例如,如果返回的是一个Map或JavaBean,`JacksonJsonHttpMessageConverter`会将其转换为JSON字符串,并...
`RequestMappingHandlerMapping`根据类型和方法级别的@RequestMapping注解创建RequestMappingInfo实例,而`RequestMappingHandlerAdapter`则是支持带有@RequestMapping注解的方法的抽象处理适配器。 Spring 3.1 还...
这篇博客文章(链接已给出)可能涵盖了Spring MVC的基本概念和使用方法。通常,Spring MVC的工作流程包括以下几个步骤: 1. **DispatcherServlet**:它是整个流程的入口点,负责接收HTTP请求并分派到合适的处理器。...
常见的处理器映射器有`BeanNameUrlHandlerMapping`和`RequestMappingHandlerMapping`。前者根据Bean的名称映射URL,后者根据`@RequestMapping`注解处理映射。 3. **注册处理器适配器**:处理器适配器如`...