繁体   English   中英

使用Jackson解析json中的布尔值时的额外数据

[英]extra data while parsing boolean value in json by using Jackson

当我使用杰克逊(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。

我该如何解决? 谢谢!

导致此问题的是lombok.Getterlombok.Setter批注。

public class Data {
    @JsonProperty("is_charging")
    public boolean isCharging; 
}

objectMapper.writeValueAsString(new Data());

可以正常工作。

添加@Getter和@Setter批注时,会发生此问题。

我没有使用lombok库的经验,但据我了解,它为您创建了getter和setter方法。

通过配置objectMapper,可以禁用自动检测getter和setter方法,以便仅字段可以序列化和反序列化。

@Getter
@Setter
public class Data {

    @JsonProperty("is_charging;")
    public boolean isCharging;

}

public static void main(String... args) throws JsonProcessingException, IOException {

    ObjectMapper objectMapper = new ObjectMapper();

    objectMapper.configure(MapperFeature.AUTO_DETECT_GETTERS, false);
    objectMapper.configure(MapperFeature.AUTO_DETECT_IS_GETTERS, false);
    objectMapper.configure(MapperFeature.AUTO_DETECT_SETTERS, false);

    Data data = objectMapper.readValue("{\"is_charging\": true}", Data.class);

    System.out.print(objectMapper.writeValueAsString(data));
}

输出:

{"is_charging":true}

请注意,只有objectMapper.configure(MapperFeature.AUTO_DETECT_IS_GETTERS, false); 在您的情况下是必需的。 提供其他参考,以备您需要时使用。

它可以通过从isCharging更改属性名称充电

@Getter
@Setter
public class Data {
    @JsonProperty("is_charging")
    public boolean charging; 
}

结果:

{"is_charging": true}

AUTO_DETECT_IS_GETTERS是一个映射器功能,它确定是否根据标准Bean命名约定自动检测“获取方法”。 如果是,则所有以前缀“ is”开头且返回类型为boolean的公共零参数方法都被视为“ is getters”。 如果禁用,则仅将显式注释的方法视为吸气剂。

默认情况下启用此功能。 您可以在配置对象映射器时禁用它。 采用,

disable(MapperFeature.AUTO_DETECT_IS_GETTERS);

这是ObjectMapper类中的方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM