我们使用 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” header 信息。 有没有办法以某种方式在我的 ColorParam 类中获取它?
如果这是一个资源类,我可以使用“@Context HttpHeaders requestHeaders”注入(inject)。在我的自定义类中可以实现类似的功能吗?
最佳答案
这是我想出的解决方案:
我的自定义类 ColorParam
引发自定义异常,例如 InvalidColorException extends WebApplicationException
。除了区域设置之外,构建响应所需的所有信息都存储在此自定义异常中(例如未本地化的错误消息、HTTP 响应代码等)。
我还创建了一个异常映射器,将 InvalidColorException
映射到执行本地化的所需响应,因为它可以访问请求 header ,即“Accept-Language” header :
公共(public)类InvalidColorExceptionMapper实现ExceptionMapper
这样,ColorParam
的创建对于所有资源类都是完全透明的(假设它在相当多的资源类中使用)。
关于java - 如何在自定义路径参数类中获取http headers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27521101/