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
方法。
- 使用PostgreSQL中的Schema的Hibernate和多租户数据库
- JPA ManyToMany Join Table具有PK的所有属性
- org.hibernate.ObjectNotFoundException:不存在具有给定标识符的行,但它确实存在
- Hibernate:在存储其更改时evict()一个持久对象
- 如何使用UUID作为Hibernate实体的主键?
- 如何使用JPA / Hibernate自动注册实体:未知实体
- 监控不同应用程序的MySQL插入
- oracle.jdbc.driver.T4CTTIrxd.readBitVector上的java.lang.ArrayIndexOutOfBoundsException(T4CTTIrxd.java:135)
- 保存具有复杂关系的实体时的StaleStateException