【问题标题】: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();
}