2016-01-28 2 views
0

Если приложение построено с несколькими компонентами, есть ли способ иметь префикс @Path для ресурсов внутри компонента?Групповые запросы в Джерси

В качестве примера рассмотрим эту услугу для получения информации о нескольких университетах из города. Компонентами будут школа А и школа Б.

amsterdam-schools.com/schoolA/students/ 
amsterdam-schools.com/schoolA/teachers/ 
amsterdam-schools.com/schoolA/teachers/{id} 
amsterdam-schools.com/schoolA/teachers/{id}/courses 
... 

amsterdam-schools.com/schoolB/teachers 
amsterdam-schools.com/schoolB/students 
... 

Возможно ли реализовать что-то вроде кода ниже?

@Path("/schoolA") 
public abstract class SchoolA { 
    // ... 
} 

@Path(@SuperPath + "/teachers") 
public class TeacherListResource extends SchoolA { 

    @Path("/{id}") 
    public Response get(@PathParam("id") Integer teacherId) { 
     // ... 
    } 

    // ... 
} 

Я знаю @SuperPath не существует, но что было бы лучше практика не писать «SchoolA» в каждом классе ресурсов? : D

ответ

0

Вы можете развернуть несколько приложений JAX-RS с разными URI в одной WAR.

Вам необходимо будет создать один подкласс класса javax.ws.rs.core.Application для такого приложения (или использовать для этой цели web.xml). И вам придется явно настраивать ресурсы в каждом подклассе переопределения getClasses или getSingletons метода:

@Path("first") 
public class FirstResource { 
    @GET 
    public String first() { 
     return "first"; 
    } 
} 

@ApplicationPath("one") 
public class JAXRSConfigurationOne extends Application { 
    @Override 
    public Set<Class<?>> getClasses() { 
     Set<Class<?>> resources = new HashSet<>(); 
     resources.add(FirstResource.class); 
     return resources; 
    } 
} 

@Path("second") 
public class SecondResource { 
    @GET 
    public String first() { 
     return "second"; 
    } 
} 

@ApplicationPath("two") 
public class JAXRSConfigurationTwo extends Application { 
    @Override 
    public Set<Class<?>> getClasses() { 
     Set<Class<?>> resources = new HashSet<>(); 
     resources.add(SecondResource.class); 
     return resources; 
    } 
} 

Оба JAX-RS-приложения становятся доступными через различные URIs:

Для получения более подробной информации, k here.

0

Да, обычно, если вы используете Джерси, для каждого компонента вы должны определить класс приложения, который расширяет javax.ws.rs.coreApplication. В этом классе вам также придется определить @ApplicationPath.

Например:

@ApplicationPath("/my-base-url-for-my-component") 
public class MyComponent extends Application {} 

Все Ressources, определенные в MyComponent будут начинаться с /my-base-url-for-my-component.

Смежные вопросы