Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Zuul:如何从请求中获取路径变量_Java_Spring Boot_Netflix Eureka_Netflix Zuul - Fatal编程技术网

Java Zuul:如何从请求中获取路径变量

Java Zuul:如何从请求中获取路径变量,java,spring-boot,netflix-eureka,netflix-zuul,Java,Spring Boot,Netflix Eureka,Netflix Zuul,使用Zuul,如何提取给定以下URL的路径变量(customerId和agreementId): 客户/{customerId}/agreements/{agreementId} 我是否可以使用Zuul或Eureka获得路径变量的引用名称,或者我是否需要使用正则表达式或类似的东西?正则表达式肯定是探索的选项之一。您可以添加一个过滤器,该过滤器将在您的请求实际发送到控制器之前使用 您可以从HttpServletRequest中提取路径变量,如下所示: Map<String, String&g

使用Zuul,如何提取给定以下URL的路径变量(
customerId
agreementId
):

客户/{
customerId
}/agreements/{
agreementId
}


我是否可以使用Zuul或Eureka获得路径变量的引用名称,或者我是否需要使用正则表达式或类似的东西?

正则表达式肯定是探索的选项之一。

您可以添加一个过滤器,该过滤器将在您的请求实际发送到控制器之前使用

您可以从HttpServletRequest中提取路径变量,如下所示:

Map<String, String> pathVariables = (Map<String, String>) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
Map pathVariables=(Map)request.getAttribute(HandlerMapping.URI\u TEMPLATE\u VARIABLES\u ATTRIBUTE);

我最近也有这样的需求,我正在研究如何解决这个问题,你可以参考
Spring Core
中的
AntPathMatcher
类,也许它会帮助你zuul被用于代理。所以您应该将请求导航到restcontroller。和customerid等不应是路由的逻辑属性。所以你应该在控制器上解析路径变量。是的,我们当然是在控制器级别解析路径变量。但是我想在将请求传递给API之前验证Zuul网关服务中的customerId和agreementId。因此,您可以在网关服务中实现
javax.servlet.Filter
,并在
doFilter(ServletRequest-req、ServletResponse-res、FilterChain-FilterChain){…}对传入的请求进行一些逻辑处理
method我知道如何使用Zuul实现自定义过滤器,但我希望通过引用路径变量来访问它们。该链接只是提供了一个创建过滤器的通用指南,但没有回答我的问题。我更希望能够按名称引用路径变量,因此对我来说,RegEx不是最佳选项。在我的情况下,它返回null。RequestContext ctx=RequestContext.getCurrentContext();HttpServletRequest=ctx.getRequest();MapPathVariables=(Map)request.getAttribute(HandlerMapping.URI\u TEMPLATE\u VARIABLES\u ATTRIBUTE);System.out.println(路径变量);我也在变空。你找到解决办法了吗?有解决办法吗?