Java JAX-RS:不区分大小写的路径

Java JAX-RS:不区分大小写的路径,java,annotations,jax-rs,case-insensitive,Java,Annotations,Jax Rs,Case Insensitive,我通过@Path注释将REST服务/方法锚定到URI模板。像往常一样: @GET @Path("/message") @Produces("application/json") public Response getMessage() { ... } 但是我的REST服务必须不区分大小写。现在,我在所有代码中都使用了@Path中的正则表达式,如下所示: @GET @Path("/{message:[mM][eE][sS][aA][gG][eE]}") @Produces("applicatio

我通过
@Path
注释将REST服务/方法锚定到URI模板。像往常一样:

@GET
@Path("/message")
@Produces("application/json")
public Response getMessage() { ... }
但是我的REST服务必须不区分大小写。现在,我在所有代码中都使用了
@Path
中的正则表达式,如下所示:

@GET
@Path("/{message:[mM][eE][sS][aA][gG][eE]}")
@Produces("application/json")
public Response getMessage() { ... }
这看起来很奇怪。规范中是否有我忽略的东西(我希望没有,请参阅),或者JAX-RS实现中是否有专门的功能?现在我正在使用


谢谢。

如果你真的需要使API情况不敏感,并且你在站点的前端使用Apache,考虑在代码之外做:用URL定义你的API,所有的小写,然后使用MOD重写来将URL当他们碰到Web服务器时改变,不管客户端实际上发送了什么。这说明了如何做到这一点。

我不知道resteasy,但如果它支持所有java正则表达式语法,您可以使用
(?i:message)
而不是您的模式。

另外,下一个模式对我来说很有用:

@Path("/{externalorders: (?i)externalorders}")

为什么您的REST服务需要不区分大小写?正如您提到的问题所指出的,URI是区分大小写的。如果你坚持要打破这个,那么是的。。。这可能是解决问题的一种方法。这里有可能的解决方案。我必须实现与.NET中实现的RESTAPI完全相同的RESTAPI,并且该API不区分大小写。其次,世界上一些REST服务是不区分大小写的,例如Last.fm API。其他人违反标准的事实并不是这样做的好理由。如果约翰尼从桥上跳下来……我们都知道,在这一点上你是对的,但客户总是对的。谢谢你们的意见。谢谢,但我不想改变整个URL的大小写。其中包含参数及其值。也许Mod Rewrite可以部分改变它,但这会将应用程序的逻辑推到Apache之外,这对我来说是不可接受的。这一点很好!我已经进行了测试,但在任何带有
IndexOutOfBoundsException:No group 2
的请求中,它都失败了。我试过
(?I:message)
(?I)message
,也许RESTeasy会对模板进行一些预处理,并统计我的非捕获组。我将把它报告给JBoss。对于下一代:-),这里报告的问题aaaa和。。。在RESTeasy 2.3-beta-2中修复。现在你的答案可以接受了吗:-)