如何从HttpServletRequest中检索RequestMappingInfo?

时间:2017-11-16 13:44:40

标签: java spring spring-mvc

我有Spring MVC应用程序,我需要在控制器中获取有关当前请求的RequestMappingInfo或从HttpServletRequest转换它。我有什么方法可以做到吗?

@GetMapping
public void test(RequestMappingInfo requestMappingInfo,
                 Authentication auth) {
    service.verify(requestMappingInfo, auth);
}

3 个答案:

答案 0 :(得分:0)

我刚读过spring文档并发现了这个。

  

@Nullable public RequestMappingInfo   getMatchingCondition(HttpServletRequest request)检查是否全部   此请求中的条件映射信息与提供的请求匹配   返回具有条件的潜在新请求映射信息   根据当前要求量身定制。例如,返回的实例可以   包含与当前请求匹配的URL模式子集,   以最佳匹配模式排序。

指定者:

getMatchingCondition in interface RequestCondition<RequestMappingInfo>

我没试过这段代码,请你查一下吗?

考试:

private 
@Autowired HttpServletRequest request;

@GetMapping
public void test(RequestMappingInfo requestMappingInfo, Authentication auth{
        assertEquals(requestMappingInfo, requestMappingInfo.getMatchingCondition(request));
}

答案 1 :(得分:0)

在您的控制器中,将HttpServletRequest添加到带注释的方法,并在RequestMappingHandlerMapping中自动装配。然后,您可以使用getHandlerMapping()获取有关当前RequestMappingInfo的信息。

例如,以下内容打印所有模式匹配的URL:

@Autowired
private RequestMappingHandlerMapping handlerMapping;

@GetMapping
public void test(RequestMappingInfo requestMappingInfo,
             Authentication auth,
             HttpServletRequest request) {

    handlerMapping.getHandlerMethods()
            .forEach((requestMappingInfo, handlerMethod)
                    -> System.out.println(requestMappingInfo.getPatternsCondition().getMatchingCondition(request)));

}

答案 2 :(得分:0)

是的,您可以检索requestMappingInfo,请尝试以下代码

@Autowired
private RequestMappingHandlerMapping handlerMapping;

@GetMapping
public void test(Authentication auth,
             HttpServletRequest request) {

    RequestMappingInfo requestMappingInfo = handlerMapping
      .getHandlerMethods()
      .entrySet()
      .stream()
      .filter(entry -> entry.getKey().getMatchingCondition(request) != null)
      .findFirst()
      .map(entry -> entry.getKey())
      .orElse(null);
}