java - 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。
解决方案
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;
}
});
推荐阅读
- graphql - Hasura:如何在插入时建立与现有记录(多对多)的关系?
- selenium - 如何使用机器人框架脚本进行负载测试或性能测试
- javascript - 我想在我的登录页面添加一个忘记密码的页面,但我更新代码后无法跳转
- airflow - 如何使用气流安排任务
- swift - Swift segue 没有做它应该做的事情
- android - 我们可以通过多少种方式在 Android 中安全地将数据从一个应用程序发送到另一个应用程序
- javascript - JS:对象重组(使用地图) - 将正则表达式添加到某个值
- python - 避免在 django allauth 的自定义用户模型中创建用户名字段
- c# - 将 Newtosoft JObject 直接转换为 BsonDocument
- ruby-on-rails - 特定 Rails 控制器的个性化视图