是否可以使使用 Avro Maven 插件生成的 POJO 与 Jackson 兼容?

Is it possible to make POJOs generated with the Avro Maven plugin play nice with Jackson?

我在使用 Avro 时遇到的问题是,我们需要为我们的数据模型使用标题大小写名称,但为我们的其余数据结构(例如 DTO)使用驼峰命名法。这是一个例子:

{
  "name": "UserRecord",
  "type": "record",
  "fields": [
    {
      "name": "Username",
      "type": "string"
    }
  ]
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CreateUserRequestDTO {
  private UserRecord userRecord;
}

Maven Avro 插件将生成 Username 字段,如下所示:

private String Username;

因此,我们在字段代码中混合了丑陋的内容,在某些情况下 title-cased 而在其他情况下则采用驼峰式。有什么好的方法可以让 Jackson 的 ObjectMapper 能够阅读这两个 属性 命名约定?

大小写混合导致 title-cased 的 Avro 字段未被 Spring Boot 的 ObjectMapper 识别,并且它们的所有字段均为空。

我不知道它是否真的适用于您的用例,但也许您可以启用 Jackson's mapper configuration 属性 ACCEPT_CASE_INSENSITIVE_PROPERTIES:

If enabled, the bean properties will be matched using their lower-case equivalents, meaning that any case-combination (incoming and matching names are canonicalized by lower-casing) should work.

您可以在配置键 spring.jackson.mapper.* 下的 application 配置文件中自定义值,例如:

spring:
  jackson:
      mapper:
          ACCEPT_CASE_INSENSITIVE_PROPERTIES: true