Jackson @JsonFormat适配问题:如何解析无引号数字格式日期?
解决数字格式日期的Jackson解析问题
方法一:自定义日期反序列化器
编写自定义JsonDeserializer处理数字转日期的逻辑,通过注解绑定到目标字段:
- 实现自定义反序列化器:
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class NumericDateDeserializer extends JsonDeserializer<Date> { private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd"); @Override public Date deserialize(JsonParser parser, DeserializationContext context) throws IOException { // 将数字值转为字符串格式的日期 String dateStr = String.valueOf(parser.getLongValue()); try { return DATE_FORMAT.parse(dateStr); } catch (ParseException e) { throw new IOException("解析数字日期失败: " + dateStr, e); } } }
- 修改POJO绑定反序列化器:
@JsonIgnoreProperties(ignoreUnknown = true) public class Test { @JsonFormat(pattern = "yyyyMMdd") @JsonDeserialize(using = NumericDateDeserializer.class) private Date date; // 添加上getter、setter方法 public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } }
方法二:全局配置反序列化规则(多类通用场景)
如果多个POJO都存在这类数字日期字段,可以全局配置ObjectMapper,统一处理该格式:
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; public class JacksonConfig { public static ObjectMapper getConfiguredMapper() { ObjectMapper mapper = new ObjectMapper(); SimpleModule module = new SimpleModule(); module.addDeserializer(Date.class, new NumericDateDeserializer()); mapper.registerModule(module); return mapper; } }
使用配置后的ObjectMapper解析JSON:
String json = "{\"date\": 20221201}"; Test test = JacksonConfig.getConfiguredMapper().readValue(json, Test.class);
补充说明
- 原解析得到1970-01-01的原因:Jackson默认将数字类型的日期值识别为毫秒级时间戳,20221201对应的时间戳远小于1970年的基准时间,因此显示为1970年初的日期。
- 自定义反序列化器需处理ParseException,避免解析异常未被捕获。
- 若使用Spring Boot,可通过
Jackson2ObjectMapperBuilder注入全局反序列化规则,无需手动创建ObjectMapper。
内容的提问来源于stack exchange,提问作者Desolation
相关产品推荐
相关产品推荐

