如何通过Jackson在Java中将JSON长整型转换为日期格式?
Jackson自动转换时间戳为可读日期格式的实现方案
当然可以实现,下面是两种常用方案,分别对应转成Date类型和指定格式的String类型:
1. 转换为Java Date类型
直接修改实体类的字段类型为Date,配合Jackson的@JsonFormat注解指定时间戳的格式即可:
public class Plugins { private String id; private String name; @JsonProperty("created_at") @JsonFormat(shape = JsonFormat.Shape.NUMBER) private Date createdAt; }
@JsonFormat(shape = JsonFormat.Shape.NUMBER)会告诉Jackson:这个Date字段对应的JSON值是数字类型的时间戳,解析时会自动把长整型数值转换成Date对象。
2. 转换为指定格式的String类型
如果需要直接得到可读的日期字符串,有两种方式:
方式一:通过注解直接配置
把字段类型改成String,同时在@JsonFormat里指定日期格式和时区:
public class Plugins { private String id; private String name; @JsonProperty("created_at") @JsonFormat(shape = JsonFormat.Shape.NUMBER, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private String createdAt; }
其中pattern可以根据需求自定义(比如yyyy/MM/dd),timezone设置为业务需要的时区(比如东八区)。
方式二:全局配置ObjectMapper
如果多个实体类都有类似需求,可以全局配置ObjectMapper,统一处理时间戳的转换:
ObjectMapper objectMapper = new ObjectMapper(); // 关闭纳秒级时间戳解析(默认是开启的,大部分场景用毫秒级时间戳) objectMapper.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, false); // 设置全局日期格式化器 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf.setTimeZone(TimeZone.getTimeZone("GMT+8")); objectMapper.setDateFormat(sdf);
配置后,所有对应Date类型的字段都会自动解析为Date对象,若字段是String类型,会直接转换成指定格式的日期字符串。
内容的提问来源于stack exchange,提问作者Evil Washing Machine
相关产品推荐
相关产品推荐

