我有Spring MVC应用程序,我需要在控制器中获取有关当前请求的RequestMappingInfo或从HttpServletRequest转换它。我有什么方法可以做到吗?
@GetMapping
public void test(RequestMappingInfo requestMappingInfo,
Authentication auth) {
service.verify(requestMappingInfo, auth);
}
答案 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);
}