我们使用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"注射。可以在我的自定义类中实现类似的功能吗?
答案 0 :(得分:1)
这是我提出的解决方案:
我的自定义类ColorParam
会引发自定义异常,例如InvalidColorException extends WebApplicationException
。构建除Locale之外的响应所需的所有信息都存储在此自定义异常中(如未本地化的错误消息,HTTP响应代码等)。
我还创建了一个异常映射器,用于将InvalidColorException
映射到所需的响应,该响应执行本地化,因为它可以访问请求标头,即“接受语言”#39;标题:
public class InvalidColorExceptionMapper implements ExceptionMapper
这样,ColorParam
的创建对所有资源类都是完全透明的(假设它已在很多资源类中使用)。
答案 1 :(得分:0)
我认为请求参数类不是本地化响应的正确位置。此类正在从请求创建参数实例,它不会创建响应。
检查color
中的paint
实例并抛出WebApplicationException
。在那里你可以使用所有标题。