【问题标题】:Match empty parameter in URL with spark-java将 URL 中的空参数与 spark-java 匹配
【发布时间】:2017-05-04 03:05:43
【问题描述】:

我正在使用 Spark Java 来匹配带有命名参数的 URL。

get("/hello/:title/:name/", (request, response) -> { return "Hello: " + request.params(":title") + "." + request.params(:name); })

这可以按预期工作,例如/hello/Dr/Mabuse/

我想允许不指定标题组件,即接受 /hello//Friend/。 SparkJava 不匹配此路径,因为 convertRouteToList 函数专门跳过空段。 https://github.com/perwendel/spark/blob/master/src/main/java/spark/utils/SparkUtils.java#L38

如何在不复制路径映射的情况下实现所需的功能(考虑路径中的多个可选片段)?

我不打算开始讨论 SparkJava 在吞下多个斜杠方面是否正确,因为他们可能有充分的理由在此处添加该代码。 双斜杠已正确讨论,例如在https://webmasters.stackexchange.com/questions/8354/what-does-the-double-slash-mean-in-urls/8381#8381

【问题讨论】:

    标签: spark-java


    【解决方案1】:

    由于不能选择空段,因此您必须进行复制。但是使用路径组,它可以是最小的重复。在你的情况下,是这样的:

    path("/hello", () -> {
        String msg = "Hello ";
        get("/:name",        (req, res) -> msg + req.params("name"));
        get("/:title/:name", (req, res) -> msg + req.params("title") + "." + req.params("name"));
    });
    

    不确定它使用的是什么 Spark 版本,但对于 2.5.5,它肯定可以工作。

    您可以阅读更多关于它的信息here(向下滚动一点)。

    【讨论】:

    • 正如问题中提到的,我想避免重复路径参数,而且这是不可扩展的,例如对于 3 个参数的情况,第一个和最后一个是可选的。我将发布一个针对 spark-java 的错误,因为信息丢失是不合理的。
    猜你喜欢
    • 2020-04-16
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多