`

RequestMappingHandlerMapping的用法

 
阅读更多

有时候,想查看应用请求对应的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自己的机制引起的。

分享到:
评论
2 楼 akirayimi 2017-03-15  
kingyyz11 写道
LZ,您好,我将你的方法复制进我的CONTROLLER里,启动项目时一直报
@Autowired 
    private RequestMappingHandlerMapping requestMappingHandlerMapping
找不到,请指教!
用的是4.1.4的SPRING,启用的注解是<context:annotation-config />


在mvc配置文件中添加:<mvc:annotation-driven />
1 楼 kingyyz11 2016-11-11  
LZ,您好,我将你的方法复制进我的CONTROLLER里,启动项目时一直报
@Autowired 
    private RequestMappingHandlerMapping requestMappingHandlerMapping
找不到,请指教!
用的是4.1.4的SPRING,启用的注解是<context:annotation-config />

相关推荐

    Spring RequestMappingHandlerMapping详解.pdf

    - 映射表包含了所有使用`@RequestMapping`注解的方法的详细信息。 - 如果找到匹配项,将返回一个`HandlerExecutionChain`对象,其中包含了要执行的处理器(通常是`HandlerMethod`对象,代表一个`@Controller`中的...

    Spring三大URL路径解析器(附工程源代码)

    `RequestMappingHandlerMapping`会根据这些注解信息建立请求URL到处理器方法的映射关系。通过这种方式,我们可以实现更加灵活和精细的路由控制。 3. **BeanNameUrlHandlerMapping** `BeanNameUrlHandlerMapping`是...

    动态生成Java springboot controller.pdf

    2. 获取`RequestMappingHandlerMapping`并调用`registerMapping`方法,将`RequestMappingInfo`与处理方法的bean关联。 3. 确保处理请求的方法所在的类被Spring容器管理,可以通过`@Component`或`@Bean`实现。 通过...

    spring-mvc 程序结构以及调用流程

    在实际使用中,通常会使用注解@Controller来标记一个类为Controller,并用@RequestMapping来映射请求路径到具体的方法上。 HandlerInterceptor拦截器可以在请求到达Controller之前或之后进行一些处理。比如,可以在...

    获取Spring中@PathVariable注解里带点的完整参数.doc

    当我们使用 @PathVariable 注解来获取 URL 中的参数时,如果参数带有点号(.),Spring 会自动截断参数,例如: * 访问 http://127.0.0.1:8080/param/hehe 返回 hehe * 访问 ...

    SpringMVC关于json、xml自动转换的原理研究.docx

    `RequestMappingHandlerMapping`负责将URL映射到控制器方法,而`RequestMappingHandlerAdapter`则是一个适配器,用于处理请求并调用合适的控制器方法。 `RequestMappingHandlerAdapter`的`messageConverters`属性是...

    springmvc4+smarty4j 实例

    3. 创建Spring MVC配置类:使用Java配置代替XML配置,定义RequestMappingHandlerMapping、RequestMappingHandlerAdapter等关键组件。 4. 模型-视图-控制器(MVC)设计模式:创建Controller类,定义处理HTTP请求的...

    Spring5.1-SpringWeb:Spring在Web应用下的使用方法

    本教程将深入探讨Spring在Web应用下的使用方法。 一、Spring MVC概述 Spring Web的核心是Spring MVC(Model-View-Controller)框架,它提供了一个分离关注点的架构,使开发者可以轻松地处理HTTP请求、业务逻辑和...

    详解获取Spring MVC中所有RequestMapping以及对应方法和参数

    通过使用 RequestMappingHandlerMapping,我们可以获取所有的控制器映射路径及其对应的方法。 下面是一个示例代码,演示如何获取Spring MVC中所有的RequestMapping及其对应的方法和参数: ```java @RequestMapping...

    动态生成Java springboot controller.docx

    接着,我们可以利用`RequestMappingHandlerMapping`的`registerMapping`方法,将`RequestMappingInfo`和处理方法关联起来: ```java this.mappingRegistry.registerMapping(mapping, "testRequest"); ``` 这里,`...

    动态生成Java springboot controller (2).docx

    `RequestMappingHandlerMapping` 负责将请求映射到处理方法。你可以通过`ApplicationContext` 获取该bean,并调用 `registerMapping()` 方法注册自定义的映射。例如: ```java @Autowired private ...

    动态生成Java springboot controller (2).pdf

    在SpringBoot应用中,Controller是处理HTTP请求的核心组件,通常我们会在类上使用@RestController或@Controller注解,并在方法上添加@RequestMapping等注解来定义URL路径和处理逻辑。然而,SpringBoot允许我们动态地...

    spring 源码

    Spring MVC内置了多种HandlerAdapter,如RequestMappingHandlerAdapter,能够处理使用@RequestMapping注解的方法。 在Controller处理完请求后,ModelAndView对象会被HandlerAdapter传递给ViewResolver(视图解析器...

    利用 Fastjson 注入 Spring 内存马,太秀了~!(csdn)————程序.pdf

    RequestMappingHandlerMapping mappingHandlerMapping = context.getBean(RequestMappingHandlerMapping.class); ``` 3. 通过反射获取控制器类的方法: ```java Method method2 = InjectToController.class....

    第三课:spring mvc 原理深度解析1

    ViewResolver 解析视图,例如 InternalResourceViewResolver 可以将视图名解析为 JSP 文件路径,然后使用 RequestDispatcher 的 forward 或 include 方法来渲染视图。 HandlerExceptionResolver 用于处理 ...

    SpringMVC关于json、xml自动转换的原理研究.pdf

    当你在控制器方法上使用`@ResponseBody`注解时,Spring会找到合适的`HttpMessageConverter`来处理返回的对象。例如,如果返回的是一个Map或JavaBean,`JacksonJsonHttpMessageConverter`会将其转换为JSON字符串,并...

    springmvc demo讲解

    `RequestMappingHandlerMapping`根据类型和方法级别的@RequestMapping注解创建RequestMappingInfo实例,而`RequestMappingHandlerAdapter`则是支持带有@RequestMapping注解的方法的抽象处理适配器。 Spring 3.1 还...

    springMVC样例

    这篇博客文章(链接已给出)可能涵盖了Spring MVC的基本概念和使用方法。通常,Spring MVC的工作流程包括以下几个步骤: 1. **DispatcherServlet**:它是整个流程的入口点,负责接收HTTP请求并分派到合适的处理器。...

    Spring MVC启动时初始化的几个常用方法

    常见的处理器映射器有`BeanNameUrlHandlerMapping`和`RequestMappingHandlerMapping`。前者根据Bean的名称映射URL,后者根据`@RequestMapping`注解处理映射。 3. **注册处理器适配器**:处理器适配器如`...

Global site tag (gtag.js) - Google Analytics