Jackson和java.sql.Time序列化/反序列化

Hibernate管理的实体中考虑这个属性:

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

我将一个JSON -object作为@RequestBody到一个Spring控制器, Jackson应该映射到一个实体的实例(pojo)。

Jackson显然没有设法将时间字符串反序列化为java.sql.Time ,因为我得到了这个exception:

 .wsmsDefaultHandlerExceptionResolver : 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了解该怎么做?

解决方案是滚动自己的反序列化器:

 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 

然后在实体中:

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

您应该尝试hh:mm:ss时间格式的java.sql.Time而不是hh:mm格式。 这将是处理exception而不是重写JsonDeserializer方法的JsonDeserializer方法。