繁体   English   中英

使用JAX-RS的不区分大小写的URL

[英]Case-insensitive URLs with JAX-RS

有没有简单的方法在JAX-RS Web服务中提供不区分大小写的URL? 这样做的目的是制作一个“宽容接受者”的网络服务。 1

我想可以使用过滤器来执行此操作.to[Lower|Upper]Case()所有传入的URL。 不幸的是,这种实现需要程序员纪律/一致性,以确保应用程序中的所有硬编码URL字符串都是严格的[低]。
另外,我还不知道JAX-RS类似于servlet过滤器。

如果重要,我使用Jersey作为我的JAX-RS实现。


1如同“在你所接受的内容中宽容,并严格遵守你所生产的” (不记得来源)

答案是否定的,因为根据RFC 3986的 URI基本上是区分大小写的:

6.2.2.1。 案例规范化

对于所有URI,百分比编码三元组内的十六进制数字(例如,“%3a”与“%3A”)不区分大小写,因此应对其进行标准化以使用大写字母表示数字AF。

当URI使用通用语法的组件时,组件语法等价规则始终适用; 即,方案和主机不区分大小写,因此应该标准化为小写。 例如,URI等同于http://www.example.com/ 除非方案另有明确定义,否则假定其他通用语法组件区分大小写(参见第6.2.3节)。

如果您仍希望使它们不区分大小写,则可以使用servlet过滤器并将其放在JAX-RS框架之前。 您仍需要在应用程序中保持一致。

如果您考虑从Jersey切换到Apache Wink ,您可以使用动态资源来确保所有URL都是较低/较高的。 因此,将servlet过滤器与动态资源相结合可以成为这种情况的完整解决方案。

我想我找到了符合JAX-RS规范的简单解决方案。 您可以在@Path注释中使用正则表达式,如下所示:

@Path("/{message:[mM][eE][sS][aA][gG][eE]}")

我已经将它与JBoss RESTeasy实现一起使用了。 在那里看到更多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM