2016-09-16 3 views
2

Новое наше приложение использует многоуровневую работу с несколькими базами данных. Предоставляя идентификатор арендатора в URL-адресе, мы можем выбрать правильный источник данных.Динамический путь приложения

Но используя этот метод, пространство имен URL становится динамическим (например: вместо /api URL-адрес изменяется на /{id}/api). Так можно ли использовать динамический @ApplicationPath?

Как можно использовать переменную в аннотации @Path, могу ли я написать что-то вроде @ApplicationPath("/tenants/{id}/api")?

+2

Я не думаю, что у вас могут быть параметры пути в '@ ApplicationPath'. Но вы можете запустить '@ Path' с параметром пути:' @Path ("/ {id}/tenants") ' –

+0

@ CássioMazzochiMolin: Да, я также начинаю думать, что использование переменной в' @ ApplicationPath' является просто не поддерживается (я все равно не нахожу никаких упоминаний об этой проблеме в Интернете). –

ответ

0

Кажется, что путь приложения не поддерживает динамические сегменты. В конце концов, мы установили его с помощью sub-resources:

Config

@ApplicationPath("tenants") 
public class TenantConfig extends ResourceConfig { 

    public TenantConfig(ObjectMapper mapper) { 
     //set provider + add mapper 

     register(TenantsController.class); 
    } 
} 

TenantsController

@Path("/{id}/api") 
public class TenantsController { 

    //register all your controllers including path here 

    @Path("/somethings") 
    public Class<SomethingController> something() { 
     return SomethingController.class; 
    } 
} 

SomethingController

@Component 
//Don't use @Path, as path info is already defined in the TenantsController 
public class SomethingController { 
    //do your stuff here; 

    @GET 
    @Path("/{id}") //Path for this example would be /tenants/{id}/api/somethings/{id} 
    public JsonApiResult get(@PathParam("id") int id) { 
     //retrieve one something 
    } 
} 
Смежные вопросы