Джерси: как использовать InjectableProvider с аннотацией @Context? - PullRequest
7 голосов
/ 03 октября 2011

Я последовал за этим сообщением и создал первым настраиваемым поставщиком инъекций LocaleProvider, который сканирует HTTP-запрос на заголовок Accept-Language .Это прекрасно работает, если я использую его в ресурсе Джерси:

@Path("test")
@GET
public Response getStatus(@Context Locale locale) {
    log.finer("Locale: "+ locale);

    Response response = Response
            .noContent()
            .build();
    return response;
}

Но когда я хочу использовать его в ExceptionMapper, я не знаю, как внедрить локаль.Я пытался аннотировать его как переменную-член:

public class MyExceptionMapper implements ExceptionMapper<MyException> {
  @Context
  private Locale locale;

  @Override
  public Response toResponse(MyException ex) {
    ...
  }
}

, но это не удается при развертывании:

The following errors and warnings have been detected with resource and/or provider classes:
SEVERE: Missing dependency for field: private java.util.Locale com.package.MyExceptionMapper.locale

Другие вещи, такие как UriInfo или HttpServletRequest могут впрыснуть так.Как я могу получить доступ к своему собственному LocaleProvider?

К вашему сведению, это на Glassfish 3.1.1 с использованием Джерси 1.8.

1 Ответ

2 голосов
/ 04 октября 2011

Существует несоответствие объема.ExceptionMapper является одноэлементным, в то время как ваш инъекционный - для области запроса.UriInfo работает вокруг этого, используя ThreadLocals.

...