我跟随this post并由第一个自定义可注射提供程序创建,LocaleProvider
扫描HTTP请求以获取 Accept-Language 标头。如果我在Jersey资源中使用它,它可以正常工作:
@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?
仅供参考,使用Jersey 1.8进行Glassfish 3.1.1。
答案 0 :(得分:2)
范围不匹配。 ExceptionMapper是一个单例,而您的注入是每个请求范围。 UriInfo使用ThreadLocals解决它。