一段时间后,ObjectMapper 将带有“is”前缀的布尔字段映射到没有“is”前缀的同名字段

ObjectMapper maps Boolean field with "is" prefix to same name field without "is" prefix after some time

提问人:Amit Kumar 提问时间:9/28/2023 最后编辑:Amit Kumar 更新时间:9/28/2023 访问量:44

问:

我在 API 的请求正文中有一个名为“isSafe”的布尔字段。此字段使用 ObjectMapper 映射到我的 Pojo 类。

如果我在请求中发送“安全”,那么它会失败,并且我收到此错误。 但是同样的请求在一段时间后开始通过。Unrecognized field \"safe\"

我的应用程序部署在云上,并且运行了多个 Pod。 在对应用程序进行任何部署/重启后,此请求将失败(这是预期的),但在 1-2 小时后,一个接一个的 Pod 开始给出成功响应。最终,所有请求都开始成功。

注意:我知道杰克逊与“is”前缀名称字段的冲突。但就我而言,请求在一段时间后开始成功。这很奇怪。

我的问题是,为什么最初在服务器重新启动映射器后会抛出错误,而一段时间后即使我传递了“安全”字段也不会抛出错误。

Pojo Class 字段(我使用 @Data 作为 getter 和 setter):

private Boolean isSafe;

ObjectMapper bean:

new ObjectMapper()
        .setSerializationInclusion(JsonInclude.Include.NON_NULL)
        .enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES)
        .registerModules(new JavaTimeModule(), new Jdk8Module());

初始分析:如果我在定义此字段的 Pojo 类中添加@JsonIgnoreProperties,那么它会按预期工作(忽略“安全”字段)。但如果没有这个,它的行为就会很奇怪。

java lombok getter-setter jackson-databind objectmapper

评论

0赞 VGR 9/28/2023
你的问题是什么?你是在问你是否在杰克逊遇到过错误吗?
0赞 Amit Kumar 9/28/2023
我的问题是,为什么最初在服务器重新启动映射器后会抛出错误,而一段时间后即使我传递了“安全”字段也不会抛出错误。
0赞 Euklios 9/30/2023
请澄清您的具体问题以及您正在寻找什么样的解决方案。您是否正在寻找一种方法来防止这种情况发生?你是在问这是否是图书馆问题吗?
0赞 Amit Kumar 10/1/2023
我知道如何防止这种行为(通过添加@JsonProperty),但我需要 t0 了解为什么会发生这种情况。为什么“安全”在服务器重新启动后立即抛出错误,但在一段时间后开始映射到“isSafe”。

答: 暂无答案