我在 API 的请求正文中有一个布尔字段,名为“isSafe”。该字段使用 ObjectMapper 映射到我的 Pojo 类。
如果我在请求中发送“安全”,那么它会失败并收到此错误无法识别的字段“安全”。但同样的请求在一段时间后开始被传递。
我的应用程序部署在云上,并且有多个 Pod 正在运行。在应用程序的任何部署/重新启动后,此请求都会失败(这是预期的),但 1-2 小时后,一个接一个的 Pod 开始给出成功响应。最终,所有请求都开始成功。
注意:我知道 Jackson 与“is”前缀名称字段产生的冲突。但就我而言,请求在一段时间后开始成功。这很奇怪。
我的问题是,为什么最初在服务器重新启动后映射器会抛出错误,一段时间后即使我传递“安全”字段也不会抛出错误。
Pojo 类字段(我使用 @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,那么它会按预期工作(“安全”字段被忽略)。但如果没有这个,它的行为就会变得很奇怪。
将 JsonProperty 添加到您的 pojo 以指定 JSON 字符串中映射的名为映射的字段。
class YourPoJo{
@JsonProperty("isSafe")
private boolean safe;
}
然后您可以在请求正文中使用
isSafe
。