泽西岛:如何使用InjectableProvider与@Context注释?
问题描述:
我遵循this post,并由第一个自定义注射提供程序创建,LocaleProvider
扫描HTTP请求头Accept-Language头。泽西岛:如何使用InjectableProvider与@Context注释?
@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。
答
存在范围不匹配。 ExceptionMapper是一个单例,而注入是每个请求范围。 UriInfo使用ThreadLocals解决它。
+4
谢谢。在你看来,最好的前进方向是什么?我也可以使用ThreadLocals解决它吗?或者我不应该担心DRY,只是在ExceptionMapper内部实现Locale检测代码? – Hank
嘿汉克,你有没有能够得到这个LocaleProvider与ExceptionMapper工作? –
不是。我在ExceptionMapper内部实现了区域检测。我应该关闭这个问题... – Hank