Java-Spark中的路线排序,一个想法

时间:2018-12-14 09:12:33

标签: spark-java

有时我在使用Spark-Java时会遇到路由问题。如果我尝试添加多条路由,有时会用获得参数的路由掩盖无参数路由。我与我的一所大学讨论了该问题,并找到了一个(我认为)效果很好的解决方案。假设您有两条路线:

1. /api/people/:id
2. /api/people/query

要确保两条路线均可用,您必须以正确的顺序进行注册。应该是2,然后是1。原因是spark将使用其包围的路由。

我们事先将所有路线收集在这样的集合中:

private final Set<WebServerRoute> handlers = new TreeSet<>((o1, o2) -> {
    int method = Integer.compare(o1.getMethod().ordinal(), o2.getMethod().ordinal());
    if (method != 0)
        return method;

    int indexO1 = o1.getUrl().indexOf(':');
    int indexO2 = o2.getUrl().indexOf(':');

    if (indexO1 == -1 && indexO2 == -1) {//no route parameters. Just compare by route-length
        return o2.getUrl().compareTo(o1.getUrl());
    } else if (indexO1 == -1) {//o2 route has parameter -> is greater than o1
        return -1;
    } else if (indexO2 == -1) {//o1 rout has parameter -> is greater than o1
        return 1;
    } else {//both routes got a parameter. the one with the lower index comes first
        if (indexO1 < indexO2) {//o1's parameters comes first -> o1 is bigger
            return 1;
        } else {
            return -1;
        }
    }
});

如果Route使用不同的http方法,则仅采用该方法的序数。否则,我们将搜索参数索引并相应地对路线进行排序。

索引为更大的路由排在最前面。 这样的第三条路线像:     3. / api / people / test /:id 会在Route-Nr之前结束。 1

我要打扰您的原因是,您脑中出现了一个问题所在?

最好的问候 迈克尔

0 个答案:

没有答案