有没有简单的方法在JAX-RS Web服务中提供不区分大小写的URL?这样做的目的是生成一个“宽松的接受者”的Web服务。 1
我想可以使用.to[Lower|Upper]Case()
所有传入网址的过滤器来执行此操作。不幸的是,这种实现需要程序员纪律/一致性,以确保应用程序中的所有硬编码URL字符串严格地为[低]。
另外,我还不知道JAX-RS类似于servlet过滤器。
如果重要,我使用Jersey作为我的JAX-RS实现。
1 在中,“在你所接受的内容中宽容,并严格按照你所生产的内容”(不记得来源)
答案 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。