【问题标题】:Implementing Case-Insensitivity in Jersey JAX-RS (Dropwizard)在 Jersey JAX-RS (Dropwizard) 中实现不区分大小写
【发布时间】:2016-07-14 22:58:53
【问题描述】:

我希望在 Jersey JAX-RS 路径、查询/表单参数中强制不区分大小写。我了解规范强制区分大小写;然而,像大多数不是主业团成员的 API 开发人员一样,我发现花费数小时的调试时间来处理查询/表单参数被默默忽略的后果是完全徒劳的,因为用户使用的是“helloWorld”而不是“helloworld”并且无法弄清楚为什么该方法没有按预期工作。我也没有看到实现不区分大小写的合理缺点,因为我不是一个受虐狂的精神病患者,因此永远不会为 /tedcruzsexscandal 和 /tedCruzSexScandal 构建两个单独的功能。我在现实世界中也从未见过这样的例子(如果有什么我遗漏的地方,请随时纠正我)。

如果 Jersey 有简单的 @CaseSensitive/@CaseInsensitive 注释,那就太好了,这将完全消除这种非常非常普遍的需求 - 但遗憾的是,这样的注释不存在并且 do not appear to be something with which the Jersey developers are concerned。因此,我正在寻找最安全、侵入性最小的标准方法来在 Jersey 中实现路径/查询/表单不区分大小写,而不会产生意外后果。作为需要避免的后果的一个例子,我过去对安全过滤器的实验表明,在 aContainerRequestFilter 中过早手动处理包含表单参数的主体将破坏下游资源中的@FormParam("paramName")。确保解决方案适用于多部分表单和异步 http 也很重要。

如果有另一个与 Jersey 类似并且具有必要的大小写功能的 Dropwizard 兼容库,请随时提及!

【问题讨论】:

  • @Meiko 这个问题更侧重于如何在不破坏资源的情况下为表单/查询/路径参数构建一个全面的解决方案
  • 查询/路径是 URL 的一部分……在我看来,答案在这里是一样的。
  • 表单参数虽然不同,但该问题的公认解决方案并没有真正提供任何有用的帮助,除了建议使用 servlet 过滤器,它会通过过早处理正文来破坏 jaxrs 资源方法
  • 你是对的,但不同的是我不能阻止用户打错字,但我可以(希望)通过使查找不区分大小写来消除大小写错误的可能性。当然,它并不能消除所有潜在的用户错误,但如果它可以将发生率降低 10-20%,还有什么技术理由不这样做呢?此外,过去我曾让用户期望此功能,并且当 API 不执行不区分大小写的匹配时,它会自动假设 API 有问题,所以这对我来说非常值得,因为我的知识没有明显的缺点。

标签: web-services rest jax-rs jersey-2.0 dropwizard


【解决方案1】:

一个例子:

@Path("/{employees : (?i)employees}")
public class JerseyService
{
    //Code
}

enter link description here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    相关资源
    最近更新 更多