gpt4 book ai didi

scala - 如何从 Scala-Play 应用程序的 URL 中提取路由变量的值?

转载 作者:行者123 更新时间:2023-12-05 04:16:53 24 4
gpt4 key购买 nike

我正在为 Play Framework 编写一个模块。在我的模块的一部分中,我有以下代码

abstract class SecurityFiltering extends GlobalSettings{
override def onRequestReceived(request: RequestHeader) = {
play.Logger.debug("onRequestReceived: " + request)
super.onRequestReceived(request)
}

override def doFilter(next: RequestHeader => Handler): (RequestHeader => Handler) = {
request => {
play.Logger.debug("doFilter: " + request)
super.doFilter(next)(request)
}
}

override def onRouteRequest(request: RequestHeader): Option[Handler] = {
play.Logger.debug("onRouteRequest: " + request)
super.onRouteRequest(request)
}
}

在 doFilter 方法中,我能够确定以下有用信息

ROUTE_PATTERN = /x/$name<[^/]+>/$age<[^/]+>
ROUTE_CONTROLLER = controllers.Application
ROUTE_ACTION_METHOD = tester
ROUTE_VERB = GET
path = /x/hello

除此之外,我还需要查询字符串 之前的 URL 命名部分的值。因此,在我的测试应用程序中给出以下路线,我需要检索 Name=Pete 和 Age=41

localhost:9000/x/Pete/41

Play Framework 中肯定有一些代码已经这样做了,但我找不到它。有人可以建议我如何实现这个目标,或者指出哪个 Play 类提取这些值吗?

最佳答案

打包 models.com.encentral.tattara.web.util;

 import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RouteExtractor {

//something like "/foo/$id<[^/]+>/edit/$james<[^/]+>"
private String routePattern;
private String path;

//something like /$id<[^/]+>
private static final String INDEX_PATTERN = "\\$(.+?)\\<\\[\\^\\/\\]\\+\\>";

public RouteExtractor(String routePattern, String path) {

this.routePattern = routePattern;
this.path = path;
}

private Map<Integer, String> extractPositions() {
Pattern pattern = Pattern.compile(INDEX_PATTERN);
Matcher matcher = pattern.matcher(this.routePattern);
Map<Integer, String> results = new HashMap<>();
int index = 0;
while (matcher.find()) {
results.put(index++, matcher.group(1));
}
return results;
}

private String replaceRoutePatternWithGroup() {
Pattern pattern = Pattern.compile(INDEX_PATTERN);
Matcher matcher = pattern.matcher(this.routePattern);
return matcher.replaceAll("([^/]+)");
}

public Map<String, String> extract() {
Pattern pattern = Pattern.compile(this.replaceRoutePatternWithGroup());
Matcher matcher = pattern.matcher(this.path);
final Map<String, String> results = new HashMap<>();
if (matcher.find()) {
this.extractPositions().entrySet().stream().forEach(s -> {
results.put(s.getValue(), matcher.group(s.getKey() + 1));
});
}
return results;
}

}

关于scala - 如何从 Scala-Play 应用程序的 URL 中提取路由变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25699895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com