使用HTTP标头的JsonSerializer和JsonDeserializer

时间:2017-06-30 21:29:48

标签: jersey jackson json-deserialization

我有一个要求,即REST消费者将在客户端或消费者的语言环境中发送日期数据。 HTTP标头将配置为发送客户端区域设置信息。

REST服务器实现需要处理Http标头并将日期从客户端语言环境转换为UTC格式,并将日期存储到数据库中。

类似地,当存在日期字段时返回响应时,预期反向操作。这将确保消费者看到客户输入的相同日期。

我想知道如何访问HTTPRequest对象或将自定义参数传递给我实现的JSONSerializer和JSONDeserializer。

1 个答案:

答案 0 :(得分:0)

我认为您可以使用ThreadLocal变量来保存ServletRequest的信息,然后在任何地方使用它。例如:

在您的过滤器中获取您需要的信息

public class YourFilter implements Filter {

    private static final ThreadLocal<String> _date = new ThreadLocal<>();

    public static ThreadLocal<String> getDate() {
        return _date;
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        //....
        //other code
        //get the date from request
        Date date = request.xxxxxx();
        //set the date to the local thread variable
        _date.set(date);
    }
}

使用JSONSerializer中的ThreadLocal变量

@Override
public void serialize(String resourceIdMsg,
                      JsonGenerator jsonGenerator,
                      SerializerProvider serializerProvider)
            throws IOException {
    String date = YourFilter.getDate().get();
}