2011-10-03 43 views
7

我遵循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 

其他像UriInfoHttpServletRequest可以注入类的。我如何访问我自己的LocaleProvider?

仅供参考这是使用Jersey 1.8的Glassfish 3.1.1。

+0

嘿汉克,你有没有能够得到这个LocaleProvider与ExceptionMapper工作? –

+1

不是。我在ExceptionMapper内部实现了区域检测。我应该关闭这个问题... – Hank

回答

2

存在范围不匹配。 ExceptionMapper是一个单例,而注入是每个请求范围。 UriInfo使用ThreadLocals解决它。

+4

谢谢。在你看来,最好的前进方向是什么?我也可以使用ThreadLocals解决它吗?或者我不应该担心DRY,只是在ExceptionMapper内部实现Locale检测代码? – Hank