2014-04-17 22 views
0

我有春天休息服務項目,我使用JPA休眠和我面臨一個奇怪的問題在我的控制器。下面是代碼片段:春天控制器轉換時間到它的本地時區

控制器:

@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方法字符串「2014-04-17T17 :15:56「,這是在IST時區,控制器將其轉換爲日期,日期時間爲」2014-04-17T22:45:56「IST,考慮以前的時間爲UTC時間。我不明白這種自動轉換的行爲。我認爲這是因爲我接受參數爲bean,其中bean是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解析器將完成剩下的工作。

相關問題