当我使用Jackson解析JSON中的布尔值时,我不仅获得了我期望的数据,还获得了额外的键值数据 . 我想将JSON反序列化为Java Bean,然后在处理之后再将其序列化为String . 额外的数据在最终结果中 . 这是我的JSON数据:
{"is_charging": true}
但是我在解析它然后序列化后得到这个:
{"is_charging": true, "charging": true}
这是我的Java bean:
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Data {
@JsonProperty("is_charging")
public boolean isCharging;
}
但是,如果我不使用 @JsonProperty
,它不能反序列化"is_charging"并默认将其反序列化为false .
我怎么解决这个问题?谢谢!
3 回答
可以通过将属性名称从 isCharging 更改为 charging 来实现
结果:
导致该问题的是
lombok.Getter
和lombok.Setter
注释 .按预期工作 .
添加@Getter和@Setter注释时会出现问题 .
我没有这个
lombok
库的经验,但据我所知,它为你创建了getter和setter方法 .通过配置objectMapper,您可以禁用getter和setter方法的自动检测,因此只能对字段进行序列化和反序列化 .
输出:
请注意,在您的情况下只需要
objectMapper.configure(MapperFeature.AUTO_DETECT_IS_GETTERS, false);
. 如果您需要,可提供其他参考 .AUTO_DETECT_IS_GETTERS 是一个映射器功能,用于确定是否根据标准Bean命名约定自动检测"is getter"方法 . 如果是,则所有以前缀"is"开头且返回类型为boolean的公共零参数方法都被视为"is getters" . 如果禁用,则只有明确注释的方法才会被视为getter .
默认情况下,该功能已启用 . 您可以在配置对象映射器时禁用它 . 使用,
这是ObjectMapper类中的方法