java - 如何在自定义路径参数类中获取http headers?

标签 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” 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/

相关文章:

java - 是否可以在 Java 9 中禁用模块?

java - 在 WebLogic12.2.1 中禁用 WADL

rest - Jersey 2.17 项目还需要 JacksonFeature.class 吗?

java - 如何从 thymeleaf 的 URL 中隐藏模型数据?

Java时间解析 "Jun 26th 2021, 04:30:15 pm NY"

java - 如何在java中创建没有扩展名的文件

java - Jersey 的全局异常处理

java - 使用 Java 搞乱系统硬件?

maven - Grails 2.2 到 2.3 - 无法解析 jersey jaxrs 插件依赖项

java - 为什么这个 <servlet-mapping> 破坏了我在 Jersey 的 REST API?