我关注了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
UriInfo
或 HttpServletRequest
等其他东西可以像那样注入(inject)。如何访问我自己的 LocaleProvider?
仅供引用,这是在 Glassfish 3.1.1 上使用 Jersey 1.8。
最佳答案
范围不匹配。 ExceptionMapper 是单例,而您的可注入(inject)对象是每个请求范围的。 UriInfo 使用 ThreadLocals 解决这个问题。
关于java - Jersey:如何将 InjectableProvider 与 @Context 注释一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7633177/