Jackson ObjectMapper将本地日期序列化为长字符串



我正在尝试使用jackson Objectmapper序列化我的myBeanObject。这就是我所拥有的:

Objectmapper m= new Objectmapper()
m.setdateFormat(new SimpledateFormat("yyyy-MM-dd")); 
String json = m.writeValueAsString(myBeanObject);

问题是我的bean中的LocalDate变量被串行化为一个长字符串,类似于{"年":1970,"月":"一月"…}

我希望LocalDate变得简单;1970-01-01";

有人能帮忙吗?

尝试添加此依赖项:

<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.8.6</version>
</dependency>

然后按如下方式设置ObjectMapper

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

如果您不想在项目中添加额外的依赖项,可以自己为ObjectMapper创建一个模块。这里有一个例子:

package com.yourexample.serialization

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import org.junit.Assert;
import org.junit.Test;
public class NoDependenciesTest {
@Test
public void testSerialization() throws JsonProcessingException {
TestUser user = new TestUser("John Doe", LocalDate.of(2022, 12, 11));
String json = writeToJson(user);
Assert.assertEquals("{"name":"John Doe","birthDate":"2022-12-11"}", json);
}
public static String writeToJson(Object object) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule("LocalDateSerializer", new Version(1, 0, 0, null, null, null));
module.addSerializer(LocalDate.class, new LocalDateSerializer());
mapper.registerModule(module);
return mapper.writeValueAsString(object);
}
private static class LocalDateSerializer extends StdSerializer<LocalDate> {
private static final long serialVersionUID = -1203520161919841191L;
protected LocalDateSerializer() {
super(LocalDate.class);
}
@Override
public void serialize(LocalDate date, JsonGenerator generator, SerializerProvider serializerProvider)
throws IOException {
if (date != null) {
generator.writeString(date.format(DateTimeFormatter.ISO_LOCAL_DATE));
}
}
}
private static class TestUser {
private String name;
private java.time.LocalDate birthDate;
public TestUser(String name, java.time.LocalDate birthDate) {
this.name = name;
this.birthDate = birthDate;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public java.time.LocalDate getBirthDate() {
return birthDate;
}
public void setBirthDate(java.time.LocalDate birthDate) {
this.birthDate = birthDate;
}
}
}

最新更新