如何使用 Jackson JSON 处理器序列化 Joda DateTime?

2022-08-31 08:37:30

如何让 Jackson 根据简单的模式(如“dd-MM-yy”)序列化我的 Joda DateTime 对象?

我试过了:

@JsonSerialize(using=DateTimeSerializer.class)
private final DateTime date;

我也试过:

ObjectMapper mapper = new ObjectMapper()
    .getSerializationConfig()
    .setDateFormat(df);

谢谢!


答案 1

使用Jackson 2.0和Joda模块,这已经变得非常容易。

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());

Maven dependency:

<dependency>
  <groupId>com.fasterxml.jackson.datatype</groupId>
  <artifactId>jackson-datatype-joda</artifactId>
  <version>2.1.1</version>
</dependency>  

代码和文档:https://github.com/FasterXML/jackson-datatype-joda

二进制文件: http://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-joda/


答案 2

在要映射的对象中:

@JsonSerialize(using = CustomDateSerializer.class)
public DateTime getDate() { ... }

在 CustomDateSerializer 中:

public class CustomDateSerializer extends JsonSerializer<DateTime> {

    private static DateTimeFormatter formatter = 
        DateTimeFormat.forPattern("dd-MM-yyyy");

    @Override
    public void serialize(DateTime value, JsonGenerator gen, 
                          SerializerProvider arg2)
        throws IOException, JsonProcessingException {

        gen.writeString(formatter.print(value));
    }
}