2016-08-04 35 views
3

考慮在Hibernate -managed實體此屬性:傑克遜和系列化的java.sql.Time /解串

@JsonFormat(pattern = "HH:mm") 
@Column(name = "start_time") 
private java.sql.Time startTime; 

我發表JSON -object爲@RequestBodyJackson應該映射到一個Spring控制器實體實例(pojo)。

Jackson也顯然不是設法時間字符串反序列化到一個java.sql.Time,因爲我得到這個異常:

.w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: 
org.springframework.http.converter.HttpMessageNotReadableException: 
Could not read document: Can not construct instance of java.sql.Time, 
problem: null 

我怎麼能指示Jackson明白做什麼?

回答

4

解決的辦法是推出自己的解串器:

import java.io.IOException; 
import java.sql.Time; 
import com.fasterxml.jackson.core.JsonParser; 
import com.fasterxml.jackson.databind.DeserializationContext; 
import com.fasterxml.jackson.databind.JsonDeserializer; 

public class SqlTimeDeserializer extends JsonDeserializer<Time> { 

    @Override 
    public Time deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { 
     return Time.valueOf(jp.getValueAsString() + ":00"); 
    } 
} 

然後在實體:

@JsonFormat(pattern = "HH:mm") 
@JsonDeserialize(using = SqlTimeDeserializer.class) 
@Column(name = "start_time") 
private Time    startTime; 
2

你應該嘗試的java.sql.Timehh:mm:ss時間格式,而不是hh:mm格式。 這將是更好的方式來處理異常,而不是重寫JsonDeserializer方法。