java - 是否可以简化@JsonSerialize 注释?

标签 java datetime jackson-databind jsonserializer localdate

下面的代码工作正常:

    // works
public class MyClass {

  @JsonSerialize(using = LocalDateTimeSerializer.class)
  @JsonDeserialize(using = LocalDateTimeDeserializer.class)
  private LocalDateTime startDate;

  @JsonSerialize(using = LocalDateTimeSerializer.class)
  @JsonDeserialize(using = LocalDateTimeDeserializer.class)
  private LocalDateTime endDate;

  @JsonSerialize(using = LocalDateTimeSerializer.class)
  @JsonDeserialize(using = LocalDateTimeDeserializer.class)
  private LocalDateTime otherDate;

  @JsonSerialize(using = LocalDateTimeSerializer.class)
  @JsonDeserialize(using = LocalDateTimeDeserializer.class)
  private LocalDateTime someMoreDate;

...}

但我不喜欢为每个日期字段编写完全相同的注释的重复方面。

我尝试过的:

// does not work

  @JsonSerialize(using = LocalDateTimeSerializer.class)
  @JsonDeserialize(using = LocalDateTimeDeserializer.class)
public class MyClass {


  private LocalDateTime startDate;
  private LocalDateTime endDate;
  private LocalDateTime otherDate;
  private LocalDateTime someMoreDate;

...}

尝试这样做会导致错误:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: 
class MyClass cannot be cast to class java.time.LocalDateTime (MyClass is in unnamed module of loader 'app'; java.time.LocalDateTime is in module java.base of loader 'bootstrap') (through reference chain: java.util.HashMap["ctxData"])

spring 应用程序的配置扩展了:

@Bean(name = "OBJECT_MAPPER_BEAN")
  public ObjectMapper jsonObjectMapper() {
    return Jackson2ObjectMapperBuilder.json()
        .serializationInclusion(JsonInclude.Include.NON_NULL)
        .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
        .modules(new JavaTimeModule())
        .build();
  }

有什么我可以尝试的想法吗?

最佳答案

如果你使用 jackson 来管理 json 序列化/反序列化,你可以全局配置 ObjectMapper :

@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();

    builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ISO_DATE_TIME));
    builder.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ISO_DATE_TIME));

    return builder;
}

关于java - 是否可以简化@JsonSerialize 注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55811031/

相关文章:

java - 如何在java中的jsp中获取实际的服务器名称和ip地址?

java - 如何从Java代码中读取可执行文件stdout stderr?

java - fragment 函数中的 NullPointerException

sql-server - MSSQL记录日期/时间自动删除

python - 将 timedelta 转换为总秒数

java - 如何使用 Jackson Mixin 将 Json 映射到 Proto?

java - Jackson ObjectCodec 转字符串 json

java - 忽略@JsonValue注释而不进行子类化

java - 使用 Java 读取单个 XML 行

java - 获取 2 个日期之间的周数,其中周数跨越 2 个月