【问题标题】:Jackson ObjectMapper not accepting all dateFormatsJackson ObjectMapper 不接受所有日期格式
【发布时间】:2019-08-04 15:02:01
【问题描述】:

我正在尝试为 Jackson 对象映射器设置自定义日期格式(我正在使用 Jackson-databind-2.8.x),以便它可以解析传入的特定格式的 JSON 日期。没有秒部分的日期格式可以正常工作,但是当我添加秒时;它似乎失败了。

有效的格式

日期格式:yyyy-MM-dd HH:mmZ

正确解析的日期示例:2019-09-01 15:00+0000

为对象映射器设置日期格式:

objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mmZ"));

无效的格式

日期格式:yyyy-MM-dd HH:mm:ssZ

示例日期:2019-09-01 15:00:00+0000

为对象映射器设置日期格式:

objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ"));

例外:

Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: 
Can not deserialize value of type java.util.Date from String "2019-09-01 15:00:00+0000": not a valid representation (error: Failed to parse Date value '2019-09-01 15:00:00+0000': Unparseable date: "2019-09-01 15:00:00+0000")

我已经验证上面是一个正确的简单日期格式,因为下面的代码可以正常工作:

import java.text.SimpleDateFormat;

public class TestDF {

    public static void main(String[] args) throws Exception {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");

        String date = "2019-09-01 15:00:00+0000";

        System.out.println(format.parse(date));
    }
}

【问题讨论】:

  • 您使用哪个版本的Jackson
  • 现在添加了相同的。之前错过了添加。
  • 我已经检查了这个版本 2.8.0 并且它按预期工作。您能否也显示您的POJOJSON 有效载荷?

标签: java json simpledateformat objectmapper jackson-databind


【解决方案1】:

您应该更仔细地查看您的代码:

objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mmZ"));

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");

这是两种不同的格式。

应该是:

objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ"));

注意 :ss

的添加

这确实是给定字符串的格式。

编辑

此测试有效(使用 Jackson 2.8.0)

public class FormatTest {

    @Test
    public void testFormat() throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
        String date = "2019-09-01 15:00:00+0000";
        Date parse = sdf.parse(date);
        String json = "{\"date\" : \"" + date + "\"}";

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setDateFormat(sdf);
        ClassWithDate cwd = objectMapper.readValue(json, ClassWithDate.class);
        Assert.assertEquals(parse, cwd.date);
    }

    private static class ClassWithDate {
        public Date date;
    }

}

【讨论】:

  • 刚刚更新了我的问题,使其更加清晰。有两个部分 1)我展示了哪种格式有效,哪些无效 2)一个简单的日期解析代码,它使用了无效的格式。
猜你喜欢
  • 2018-11-25
  • 1970-01-01
  • 2022-09-30
  • 2021-03-31
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多