是否可以使使用 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
我在使用 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