2016-05-22 2 views
2

Я успешно ввел HttpServletRequest, используя @Context внутри моего класса ресурсов.Как ввести HttpServletRequest в класс не-ресурса?

Можно ли ввести HttpServletRequest в класс не-ресурса? Я создал класс, который выполняет различные сетевые операции, которые требуют значений, хранящихся внутри HttpSession. Например ...

public class RequestExecutor { 

    @Context 
    HttpServletRequest request; 

    public Response performNetworkRequest(Request request) { 

     // Do network request - I want to access the session without passing the session object around my code everywhere. 
     return response; 
    } 
} 

Возможно ли это?

+1

JAX-RS и HTTP сессии. Что-то не так. –

+1

JAX-RS предполагается использовать для создания приложений REST. То есть приложения, которые не используют сеанс HTTP. –

+1

В любом случае, сделайте свой класс не-ресурса CDI bean (например, аннотируйте его с помощью '@ RequestScope') и используйте' @ Inject' для инъекции 'HttpServletRequest'. –

ответ

1

Вы не можете использовать @Context см JSR-311 для JAX-RS 1.1 и JSR-339 для JAX-RS 2.0:

JAX-RS предоставляет возможности для получения и обработки информации о контексте развертывания приложения и контекста индивидуальных запросов. Такая информация доступна для подклассов Application (см. Раздел 2.1), корневых классов ресурсов (см. Главу 3) и поставщиков (см. Главу 4).

Вы также можете инициализировать суб ресурсы:

Интерфейс ResourceContext обеспечивает доступ к конкретизации и инициализации ресурсов или subresource классов в области по умолчанию каждого запроса. Его можно ввести, чтобы помочь с созданием и инициализацией, или просто инициализацией экземпляров, созданных приложением.

Смотрите также: ResourceContext#initResource

Но вы могли бы использовать наследование:

public abstract class AbstractResource { 

    @Context 
    HttpServletRequest request; 

    protected Response performNetworkRequest() { 
     // do something with request 
    } 
} 

@Path("myResource") 
public class MyResource extends AbstractResource { 
    // some methods 
} 
Смежные вопросы