JAX-RS:不区分大小写的路径
我已通过 @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 实现有任何特殊功能吗?现在我正在使用 JBoss RESTeasy。
谢谢。
I have anchored REST services/methods to URI template by @Path
annotation. It looks like as usual:
@GET
@Path("/message")
@Produces("application/json")
public Response getMessage() { ... }
But my REST service has to be case-insensitive. Now I'm using regular expression in @Path
in all my code like that:
@GET
@Path("/{message:[mM][eE][sS][aA][gG][eE]}")
@Produces("application/json")
public Response getMessage() { ... }
This looks weird. Is there something I overlooked in specification (I hope not, see this) or has any of JAX-RS implementations special feature for that? Now I'm using JBoss RESTeasy.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我不知道resteasy,但如果它支持所有java正则表达式语法,您可以使用
(?i:message)
而不是您的模式。i don't know resteasy, but if it supports all java regex syntax, you could use
(?i:message)
instead of your pattern.如果您确实需要使 api 不区分大小写,并且您在站点前端使用 Apache,请考虑在代码之外执行此操作:使用全小写的 url 定义您的 API,并使用 Mod-Rewrite 更改 url无论客户端实际发送什么内容,当它们到达 Web 服务器时都变为小写。这篇博客文章介绍了如何执行此操作。
If you really need to make the api case-insensitive and you're using Apache on the front-end of your site, consider doing it outside of code: define your API with the urls all lowercase and use Mod-Rewrite to change the urls to lowercase when they hit the web server no matter what the client actually sent. This blog post describes how to do this.
另外,下一个模式对我有用:
Also, the next pattern is working for me: