我们使用LocalDate定义了一个DTO:
@JsonProperty("dob")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private LocalDate dob;我们有一个ObjectMapper代码,定义如下:
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:
<!-- 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字符串时:
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?
谢谢!
发布于 2017-06-07 16:46:18
原来这是ClassLoader的问题。在最小的情况下,代码工作并相应地将LocalDate转换为JSON。当您将一个项目转换为另一个项目时,会发生的情况是,ObjectMapper是在没有JavaTimeModule的情况下在其他地方定义的。
我拿走了密码:
private static final ObjectMapper makeMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new ParameterNamesModule());
mapper.registerModule(new Jdk8Module());
mapper.registerModule(new JavaTimeModule());
return mapper;
}把它直接带到了我需要它的班上,这起了作用。从一个不同的项目中接触到一个实用工具对我来说是行不通的。
希望这能帮到别人。
发布于 2020-07-05 14:10:42
在com.fasterxml.jackson.core:jackson-databind:2.9.7中,可以使用以下代码实现LocalDate解决方案:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
objectMapper.registerModule(new JavaTimeModule());
String expectedJson = objectMapper.writeValueAsString(dataVersions);https://stackoverflow.com/questions/44336057
复制相似问题