如何在自定义路径参数类中获取http标头?

时间:2014-12-17 08:21:29

标签: java jersey

我们使用Jersey 1.13。不是我的选择,但我们还不能更新到更高版本。

Jersey允许用户创建的java类型使用路径参数。其文档中给出的示例如下:

资源方法:

 @Path("paint/{color}")
 @GET
 public Response paint(@PathParam("color") ColorParam color) { ... }

路径参数{color}的自定义java类型

public class ColorParam {
     public ColorParam(String s) {
        try {
           ... // implementation here
        } catch (Exception e) {
           throw new WebApplicationException("Something's wrong");
        }
     }
 }

我需要本地化我的回复错误字符串 - "出了问题"。为此,我需要" Accept-Language"标题信息。  有办法以某种方式在我的ColorParam类中获取它吗?

如果这是一个资源类,我可以使用" @Context HttpHeaders requestHeaders"注射。可以在我的自定义类中实现类似的功能吗?

2 个答案:

答案 0 :(得分:1)

这是我提出的解决方案:
我的自定义类ColorParam会引发自定义异常,例如InvalidColorException extends WebApplicationException。构建除Locale之外的响应所需的所有信息都存储在此自定义异常中(如未本地化的错误消息,HTTP响应代码等)。 我还创建了一个异常映射器,用于将InvalidColorException映射到所需的响应,该响应执行本地化,因为它可以访问请求标头,即“接受语言”#39;标题:
    public class InvalidColorExceptionMapper implements ExceptionMapper

这样,ColorParam的创建对所有资源类都是完全透明的(假设它已在很多资源类中使用)。

答案 1 :(得分:0)

我认为请求参数类不是本地化响应的正确位置。此类正在从请求创建参数实例,它不会创建响应。

检查color中的paint实例并抛出WebApplicationException。在那里你可以使用所有标题。