我正在尝试反序列化Date对象并设置本地时区。我从UTC服务器获取日期,我的网站托管位于同一时区,但是当我从服务器和我的网站收到时区时。但是,客户端可以位于另一个时区,因此我需要在客户端时区设置时间。为了更改时区,我在之前的请求中将其保存在会话中,但是当我要反序列化它时,会话为空。
我在对象中有一个日期参数
public class WorkDay implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
@JsonDeserialize(using = CustomJsonDateDeserializer.class)
private Date date;
然后,我的反序列化方法
public class CustomJsonDateDeserializer extends JsonDeserializer<Date>
{
@Autowired
private HttpSession session;
@Override
public Date deserialize(JsonParser jsonparser, DeserializationContext deserializationcontext) throws IOException, JsonProcessingException {
String dateString = jsonparser.getText();
@SuppressWarnings("resource")
long createdate = new Scanner(dateString).useDelimiter("[^0-9]+").nextLong();
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(createdate);
TimeZone tz = (TimeZone)session.getAttribute("timezone");
cal.setTimeZone(tz);
return cal.getTime();
}
}
我在会话中保存了时区
@RequestMapping(value = "/home", method = RequestMethod.GET)
public String home(TimeZone timezone, Model model) {
UserAuth user = (UserAuth)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if(user!= null)
{
try{
session.setAttribute("timezone", timezone);
我在之前的请求中在会话的时区之前保存,但在此类中,session为null。有什么方法可以从这个课程的会话中获取数据吗?
谢谢!
答案 0 :(得分:0)
@Autowired
在Custom Deserializer类中不起作用,因为该类的实例是由Jackson
创建的,而不是Spring
。
就获得TimeZone
而言,session
存储在服务器端,因此将具有服务器的时区。所以,除非你设置&#34;时区&#34;明确地使用任何其他值进行属性,您可以使用以下内容获取默认时区:
TimeZone defaultTimeZone = TimeZone.getDefault();