与当地时间zome的日期解串器

时间:2017-03-31 08:15:33

标签: java json spring date json-deserialization

我正在尝试反序列化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。有什么方法可以从这个课程的会话中获取数据吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

@Autowired在Custom Deserializer类中不起作用,因为该类的实例是由Jackson创建的,而不是Spring

就获得TimeZone而言,session存储在服务器端,因此将具有服务器的时区。所以,除非你设置&#34;时区&#34;明确地使用任何其他值进行属性,您可以使用以下内容获取默认时区:

TimeZone defaultTimeZone = TimeZone.getDefault();