java - Jackson ObjectMapper 不接受所有日期格式

标签 java json simpledateformat objectmapper jackson-databind

我正在尝试为 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));
    }
}

最佳答案

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

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

}

关于java - Jackson ObjectMapper 不接受所有日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57347663/

相关文章:

java - 时区和 SimpleDateFormat 奇怪的行为

java - 如何返回存储在该方法中的 2 个 ArrayList,而不是仅仅将其打印在 void 中?

PHP JSON 获取键和值

json - 在 Firebase 数据库中构建好友列表

java - 使用python从java应用程序中读取json

java - 无法解析的日期 : "2018-07-03T01:00:21.000+0000" Cannot parse this format

java - Android - 使用简单日期格式的字符串到时间(仅)

java - Android SDK v9 上的 Google map V2 'the application has stopped unexpectedly'

java - Linux命令查找哪些是jvm加载的jar

javascript - 如何在react-native中运行java方法