Spring:从HttpRequest获取Controller中的注册URL模式

时间:2018-06-11 15:40:36

标签: spring-mvc spring-boot

是否有办法从传入的HTTP请求中获取已注册的URL模式(In Controller)。

例如,如果我的控制器代码是

@RestController
@RequestMapping("greeting")
public class Greeting {

    @GetMapping("/{text}")
    public String echo(@PathVariable("text") String text) {
        return text;
    }

}

传入请求为http://localhost:8080/greeting/Hello, 我想获取映射值 / greeting / {text} 。我可以使用任何拦截器或处理程序实现相同的目的吗?

我已经注册了所有原始地图网址,例如 / greeting / {text} / users / find / {id} 等,并希望执行一些验证如果传入请求属于任何已注册的请求。我可以使用一个自定义方法级别注释实现相同但我现在不想更改所有代码。如果我可以从一个Interceptor实现相同的功能或扩展任何弹簧处理程序,那将是很好的。

上面的代码段是一个示例。我有4到5个不同api的spring应用程序,并希望创建一个可以实现相同的通用安全包。

3 个答案:

答案 0 :(得分:0)

HttpServletRequest请求 request.getCurrentUrl()可以获取url

答案 1 :(得分:0)

只需使用以下代码即可获取网址以及请求/查询参数。

request.getRequestURL().toString() + "?" + request.getQueryString();

请参考这个以获得更好的方法。

What's the best way to get the current URL in Spring MVC?

答案 2 :(得分:0)

您可以通过

进行访问
final String pattern = request.getAttribute(org.springframework.web.servlet.HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE):

来源:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/HandlerMapping.html#BEST_MATCHING_PATTERN_ATTRIBUTE