[英]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.Getter
和lombok.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.