java - Jersey:如何将 InjectableProvider 与 @Context 注释一起使用?

标签 java dependency-injection jersey

我关注了this post并由第一个自定义可注入(inject)提供程序创建,一个 LocaleProvider 扫描 Accept-Language header 的 HTTP 请求。如果我在 Jersey 资源中使用它,它工作正常:

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

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

但是当我想在 ExceptionMapper 中使用它时,我不知道如何注入(inject)语言环境。我试图将其注释为成员变量:

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

UriInfoHttpServletRequest 等其他东西可以像那样注入(inject)。如何访问我自己的 LocaleProvider?

仅供引用,这是在 Glassfish 3.1.1 上使用 Jersey 1.8。

最佳答案

范围不匹配。 ExceptionMapper 是单例,而您的可注入(inject)对象是每个请求范围的。 UriInfo 使用 ThreadLocals 解决这个问题。

关于java - Jersey:如何将 InjectableProvider 与 @Context 注释一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7633177/

相关文章:

Java - 什么可以使这段代码运行得更快?

javafx - 传递参数JavaFX FXML

eclipse - grizzly 记录到 stderr,在 eclipse 中很烦人

java - 在没有应用程序服务器的情况下使用 Jersey

java - 为什么会得到以下结果?

java - 比较 FileTime 和 LocalDateTime

java - DynamoDB 条件 ttl

dependency-injection - Smalltalk 有依赖注入(inject)框架吗?

java - 实例化每个范围/组的单例 - 陷入 Guice 依赖 hell

eclipse - java.lang.ClassNotFoundException : com. sun.jersey.spi.container.servlet.ServletContainer 异常