首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jackson扩展LocalDate

Jackson扩展LocalDate
EN

Stack Overflow用户
提问于 2017-06-02 19:21:28
回答 2查看 3.5K关注 0票数 4

我们使用LocalDate定义了一个DTO:

代码语言:javascript
复制
@JsonProperty("dob")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private LocalDate dob;

我们有一个ObjectMapper代码,定义如下:

代码语言:javascript
复制
private static final ObjectMapper makeMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new ParameterNamesModule());
    mapper.registerModule(new Jdk8Module());
    mapper.registerModule(new JavaTimeModule());
    return mapper;
}

我们在我们的jsr310文件中包含了所有的jackson数据库核心,pom.xml:

代码语言:javascript
复制
    <!-- Jackson JSON Mapping -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.8.8</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.8.8.1</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.8.8</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-parameter-names</artifactId>
        <version>2.8.8</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jdk8</artifactId>
        <version>2.8.8</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
        <version>2.8.8</version>
    </dependency>

因此,当我将对象转换为JSON字符串时:

代码语言:javascript
复制
    String json = makeMapper().writeValueAsString(myobject);

道布将JSON字符串写为:

“道布”:{“年”:1964年,“月”:“二月”,“年表”:{ "calendarType":"iso8601","id":"ISO“},"monthValue":2,"dayOfMonth":13,"dayOfWeek":”周四“,”纪元“:"CE","dayOfYear":44,"leapYear":真}

而不是:“道布”:“1964-02-13”,这是正确的。

所以,我不知道我是怎么做到的?

我想确保日期写得正确,这样我就可以重新解析回一个LocalDate。或者,我是否可以使用现有的JSON (扩展的)并将其解析回LocalDate?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-07 16:46:18

原来这是ClassLoader的问题。在最小的情况下,代码工作并相应地将LocalDate转换为JSON。当您将一个项目转换为另一个项目时,会发生的情况是,ObjectMapper是在没有JavaTimeModule的情况下在其他地方定义的。

我拿走了密码:

代码语言:javascript
复制
private static final ObjectMapper makeMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new ParameterNamesModule());
    mapper.registerModule(new Jdk8Module());
    mapper.registerModule(new JavaTimeModule());
    return mapper;
}

把它直接带到了我需要它的班上,这起了作用。从一个不同的项目中接触到一个实用工具对我来说是行不通的。

希望这能帮到别人。

票数 4
EN

Stack Overflow用户

发布于 2020-07-05 14:10:42

com.fasterxml.jackson.core:jackson-databind:2.9.7中,可以使用以下代码实现LocalDate解决方案:

代码语言:javascript
复制
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
objectMapper.registerModule(new JavaTimeModule());
String expectedJson = objectMapper.writeValueAsString(dataVersions);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44336057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档