Java对象中时间格式 JSON序列化的处理
今天有个数据存es的需求。数据入es之前需要先进行JSON序列化输出,便于开发校验数据正确与否。同时也能确保入ES的数据正确与否。
以下这个方案只能作为一个解决问题的尝试思路,因为Spring家族的序列化设置一直在变,2.5.3版本就有了个 spring.mvc.format.* 配置。
| |
| @Builder |
| public class DemoEntity { |
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| private LocalDateTime localDateTime; |
| |
| @JsonFormat(pattern = "yyyy-MM-dd") |
| @DateTimeFormat(pattern = "yyyy-MM-dd") |
| private LocalDate localDate; |
| |
| @JsonFormat(pattern = "HH:mm:ss") |
| @DateTimeFormat(pattern = "HH:mm:ss") |
| private LocalTime localTime; |
| |
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| private Date dateTime; |
| |
| @JsonFormat(pattern = "yyyy-MM-dd") |
| @DateTimeFormat(pattern = "yyyy-MM-dd") |
| private Date date; |
| |
| @JsonFormat(pattern = "HH:mm:ss") |
| @DateTimeFormat(pattern = "HH:mm:ss") |
| private Date time; |
| } |
问题方案一: fastJSON
由阿里开源的fastJSON,使用简单无脑。但是并无法事项我们所需的效果。针对LocalDateTime的序列化无法指定格式,且会把对象值为null的属性删掉。(例如:如果有的People对象的sex属性为null,那么序列化的json会没有sex这个key。创建时间设置类型为LocalDateTime,那么序列化的字符串必定为 "yyyy-MM-dd'T'HH:mm:ss" 格式。
| |
| System.out.println(JSON.toJSONString(DemoEntity.getLocalDateTime())); |
| |
| |
成功方案二:jackSon,Spring Mvc默认内置使用。
| import com.alibaba.fastjson.JSON; |
| import com.fasterxml.jackson.core.JsonProcessingException; |
| import com.fasterxml.jackson.databind.ObjectMapper; |
| import lombok.extern.log4j.Log4j2; |
| import org.springframework.web.bind.annotation.RequestBody; |
| import org.springframework.web.bind.annotation.RequestMapping; |
| import org.springframework.web.bind.annotation.RestController; |
| |
| import java.time.LocalDate; |
| import java.time.LocalDateTime; |
| import java.time.LocalTime; |
| import java.util.Date; |
| |
| |
| |
| |
| |
| |
| @RestController |
| @Log4j2 |
| public class Demo { |
| @RequestMapping("/elastic/test") |
| public DemoEntity test(@RequestBody DemoEntity demoEntity) throws JsonProcessingException { |
| ObjectMapper objectMapper = new ObjectMapper(); |
| |
| objectMapper.findAndRegisterModules(); |
| System.out.println("fastJson: " + JSON.toJSONString(demoEntity)); |
| System.out.println("jackson: " + objectMapper.writeValueAsString(demoEntity)); |
| |
| return new DemoEntity(LocalDateTime.now(), LocalDate.now(), |
| LocalTime.now(), |
| new Date(), |
| new Date(), |
| new Date()); |
| } |
| } |
| |
| |
| |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律