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

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

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

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


1如同“在你所接受的东西中宽容,并严格按照你所生产的东西” (不记得来源)

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

6.2.2.1。 案例规范化

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

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

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

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

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

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

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