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

时间:2011-04-11 16:31:11

标签: java rest jersey jax-rs

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

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

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


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

2 个答案:

答案 0 :(得分:7)

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

  

6.2.2.1。案例规范化

     

对于所有URI,百分比编码中的十六进制数字      三联体(例如,“%3a”对“%3A”)是不区分大小写的,因此      应该标准化为使用大写字母表示数字A-F。

     

当URI使用通用语法的组件时,组件      语法等价规则总是适用;即,该计划和      host不区分大小写,因此应该归一化为      小写。例如,URI是      相当于http://www.example.com/。另一种通用语法      除非特别指出,否则假定组件区分大小写      该计划另有规定(见第6.2.3节)。

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

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

答案 1 :(得分:4)

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

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

我已经将它与JBoss RESTeasy实现一起使用了。查看更多there