【问题标题】:JsonSerializer and JsonDeserializer using HTTP Headers使用 HTTP 标头的 JsonSerializer 和 JsonDeserializer
【发布时间】:2017-06-30 21:29:47
【问题描述】:

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

REST 服务器实现需要处理 Http 标头并将日期从客户端区域设置转换为 UTC 格式并将日期存储到数据库中。

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

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

【问题讨论】:

    标签: jersey jackson json-deserialization


    【解决方案1】:

    我想你可以使用 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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 2017-10-22
      • 2014-09-20
      • 2012-06-27
      相关资源
      最近更新 更多