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

编程入门 行业动态 更新时间:2024-10-11 21:25:54
本文介绍了Jackson和java.sql.Time序列化/反序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

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

我发布 JSON - 对象为 @RequestBody 到一个Spring Controller,它应该映射到实体的实例(pojo)中。 c> Jackson >

Jackson 显然不能将时间字符串反序列化为 java.sql。 Time ,因为我得到这个异常:

.wsmsDefaultHandlerExceptionResolver:无法读取HTTP消息: org.springframework.http.converter.HttpMessageNotReadableException:无法读取文档:无法构造java.sql.Time实例,问题: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; 公共类SqlTimeDeserializer扩展了JsonDeserializer< Time> { $ b $ @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)私人时间startTime;

Consider this property in an Hibernate-managed entity:

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

I post a JSON-object as @RequestBody to a Spring Controller which Jackson is supposed to map into an instance of the entity (pojo).

Jackson does apparently not manage to de-serialize the time-string into a java.sql.Time, because I am getting this Exception:

.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

How can I instruct Jackson to understand what to do?

解决方案

The solution is to roll your own deserializer:

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"); } }

And then in the entity:

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

更多推荐

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

本文发布于:2023-11-22 04:54:07,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:序列化   java   Jackson   Time   sql

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!