【发布时间】:2017-06-27 08:06:26
【问题描述】:
首先是我们的场景:
我们有一个 OSGI 环境,其中几个包发布自己的休息端点,例如:
http://localhost:8080/api/cars
http://localhost:8080/api/food
http://localhost:8080/api/toys
这是使用 JAXRSServerFactoryBean.create() 方法完成的,地址是上面列出的。
现在我们需要为用户请求添加一个租户 ID(不是用户身份验证,这是不同的,因为用户可能是多个租户的一部分)。 URL 应如下所示:
http://localhost:8080/api/tenant/{tenantid}/cars
http://localhost:8080/api/tenant/{tenantid}/food
http://localhost:8080/api/tenant/{tenantid}/toys
我现在尝试了两种方法来实现这一点:
- 将租户 ID 添加到服务地址 (
http://localhost:8080/api/tenant/{tenantid}) - 结果:我可以在给定的 URL 下访问我的服务,但我无法为租户 ID 填写任何数据,但必须输入URL 中的 {tenantid},这不是我需要使用它的方式。 - 在同一 URL (
http://localhost:8080/api) 下发布所有三个服务,将租户部分移动到每个 api 类的 @Path 注释 - 结果:异常,该地址已被其他端点占用
有没有人知道如何正确地做到这一点?我知道 ServiceBean 可以将一组实现者作为参数而不是单个类,但这不是一个选项,因为捆绑包是单独加载的,并且当我尝试将其设置为“一体式”时,我遇到了一些依赖性问题。
作为旁注:我知道,我们可以将租户 ID 放在标题中,但通常租户信息位于 URL(主机或路径)中的某个位置,我们希望使用这种“通用”样式而不是添加自定义标题,虽然标题样式的实现会容易得多(已经让它工作了)。
任何想法都会有所帮助。 谢谢, 凯
【问题讨论】:
-
还有什么想法吗?我们将使用查询参数来完成它,这是我们试图避免的......
标签: java rest jax-rs osgi restful-url