2013-08-28 2 views
2

Я уже видел the following question о том, как вводить @Context зависимостей в конструкторы ресурса Джерси. Но мой вопрос немного другой - я бы хотел ввести строку @PathParam. У меня есть класс, похожий на следующее:Как я могу смешать инъекцию Guice и Jersey?

@Path("foo/{fooId}/bar") 
public class BarResource { 
    @Inject 
    public BarResource(@PathParam("fooId") String foo, Service service) { 
    ... 
    } 
    ... 
} 

Service впрыскивается устраивало Guice, но сегмент пути всегда нуль. Это меня действительно удивляет; если бы я предположил, что Гис громко взорвался бы, жалуясь на неразрешимую зависимость.

Как я могу ввести параметр пути таким образом? Я бы предпочел избегать полевой инъекции для того, чтобы эти классы ресурсов были подвергнуты тестированию.

ответ

0

Похоже, что @PathParam неприемлем по умолчанию как аргумент Constructor. Этот new feature document содержит

Аргументы, разрешенные в конструкторе класса ресурсов, зависят от поставщика ресурсов, используемого для создания экземпляра класса ресурсов [...]. Для классов ресурсов по умолчанию для каждого запроса можно использовать любую комбинацию параметров, аннотированных с помощью UriParam, UriParam, QueryParam, MatrixParam, HeaderParam или HttpContext.

Вы можете указать своего поставщика ресурсов, который обрабатывает аннотацию @PathParam.

+0

Я не уверен, что вы имеете в виду, говоря, что это не в контексте обработки запроса. Он не связан как Singleton; когда я трачу его в отладчике, конструктор действительно вызывается по HTTP-запросу. Из документов Джерси: «Ресурсы JAX-RS управляются в области запроса по умолчанию, что означает, что для каждого запроса создается новый ресурс». –

+0

Кроме того, я могу ввести 'UriInfo' и получить доступ к этому сегменту из fooId. Но это беспорядочно, и я хотел бы сохранить этот конструктор как POJO-ish, насколько это возможно. Следовательно, я хотел бы знать, есть ли способ использовать аннотацию '@ PathParam', как предполагалось. –

+0

@TomG Кажется, поставщик ресурсов по умолчанию не разрешает '@ PathParam'. –

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