【问题标题】:Spring Controller converts time to it's Local TimeZoneSpring Controller 将时间转换为本地时区
【发布时间】:2014-04-17 12:08:15
【问题描述】:

我有 spring rest 服务项目,我正在使用 JPA hibernate,我在控制器中遇到了一个奇怪的问题。下面是代码sn-p:

控制器:

@RequestMapping(method = RequestMethod.POST, value=PATH_SEPERATOR+ CREATE_OR_UPDATE_EVENT_METHOD,  headers = ACCEPT_APPLICATION_JSON, produces = APPLICATION_JSON)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
ResponseBean createOrUpdateEvent(@RequestBody Event eventBean)
{   
    ResponseBean  response = new ResponseBean();
    try {

        String sysId = eventService.createOrUpdateEvent(eventBean);
        response.setStatus(OK);
        response.setData(sysId);

    } catch(Exception ex) {

        response = handleException(CREATE_OR_UPDATE_EVENT_METHOD, ex);
        return response;
    } 
    return response;

}  

Event.java

@Entity
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "sysId", scope = Event.class)
@Table(name = "event")
public class Event {  

@Column(name = "date_time")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss")
private Date dateTime;  

public Date getDateTime() {
    return dateTime;
}

public void setDateTime(Date dateTime) {
    this.dateTime = dateTime;
}
}  

当我在 createOrUpdateEvent 方法中将日期作为 IST 时区中的字符串“2014-04-17T17:15:56”传递给事件 bean 时,控制器将其转换为日期时间为“2014-04-17T22:45”的日期:56" IST 将以前的时间视为 UTC 时间。我不明白这种自动转换的行为。我认为这是因为我接受参数作为 bean,其中 bean 是 JPA 实体。请帮我修复它。

【问题讨论】:

    标签: spring hibernate spring-mvc jpa


    【解决方案1】:

    您必须考虑几件事情。首先,您在提供的 JSON 序列化格式“yyyy-MM-dd'T'HH:mm:ss”中缺少时区信息。有一个添加它的格式字符 - Z。根据您的喜好,使用它应该类似于“yyyy-MM-dd'T'HH:mm:ssZ”。您应该考虑的另一件事是 java.util.Date 不知道 TimeZone,当您创建一个新的 Date(long) 时,它总是假定传递的日期在当前时区。

    因此,为了解决此问题,您必须按照我告诉您的那样添加(并传递)时区,然后 Json 解析器将完成剩下的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 2018-01-17
      • 2014-10-05
      • 2014-10-25
      • 1970-01-01
      相关资源
      最近更新 更多