首页 > 解决方案 > SparkJava - 区分大小写的端点

问题描述

我有一个 java 代码,它使用 SparkJava ( http://sparkjava.com/ ) 为 http 端点提供服务。

端点是这样生成的:

 get("/xxx/yyy", (request, response) -> {
        ...
        return SOMETHING_TO_RETURN
 });

使用这种方法我有一个问题:
假设我定义了一个端点: '/api/status/car' ,
但用户有时会调用 '/api/status/ CAR '。所以问题在于这样定义的url区分大小写。

现在我必须以某种方式修复它:使大小写不敏感。 我看过过滤器(例如“之前”),但我相信我无法修改请求网址(toLowerCase)。

所以主要问题是:通过使用该方法定义端点,我如何将请求 url 修改为小写,或者说 sparkjava 应该使用不区分大小写的模式映射 url。

标签: javahttpspark-java

解决方案


URL(域名部分除外)可能始终区分大小写。由服务器决定,因此用户永远无法知道。您可以在W3.org中了解更多信息。

解决您的问题的一种方法可能是使用请求参数

get("/api/status/:carParam", (request, response) -> {
  if (request.params(":carParam").equalsIgnoreCase("car")) {
    return SOMETHING_TO_RETURN;
  }
});

如果您有更多的路由,/api/status/那么car您应该重命名:carParam为更通用的名称,例如:param然后在处理程序主体内,您将检查此查询参数并相应地返回正确的返回值。例如:

get("/api/status/:param", (request, response) -> {
  if (request.params(":param").equalsIgnoreCase("car")) {
    return SOMETHING_TO_RETURN_CAR;
  } else if (request.params(":param").equalsIgnoreCase("passenger")) {
    return SOMETHING_TO_RETURN_PASSENGER;
  }
});

推荐阅读