Java 处理Jackson中属性的布尔值和空字符串?
我有一个JSON属性,可以是Java 处理Jackson中属性的布尔值和空字符串?,java,json,jackson,Java,Json,Jackson,我有一个JSON属性,可以是 { "observed": true } { "observed": false } { "observed": "" } 我想映射它,以便在Java中它将是“true”、“false”或“ 那我就做一个能给我 public Optional<Boolean> getObservedOpt() { if ("".equals(observedValue)) { return Optional.empty(); } else
{ "observed": true }
{ "observed": false }
{ "observed": "" }
我想映射它,以便在Java中它将是“true”
、“false”
或“
那我就做一个能给我
public Optional<Boolean> getObservedOpt() {
if ("".equals(observedValue)) {
return Optional.empty();
} else {
return Optional.of(Boolean.parseBoolean(observedValue));
}
}
public可选getObservedOpt(){
如果(“.”等于(观测值)){
返回可选的.empty();
}否则{
返回可选的.of(Boolean.parseBoolean(observedValue));
}
}
但是,我不知道如何将
true
和false
转换为字符串。或者也许有一种更优雅的方法可以不用字符串比较来完成它。我建议使用此功能配置对象映射器,因此在空字符串的情况下,它将被分配给null
ObjectMapper mapper = new ObjectMapper()
.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
@JsonProperty("observed")
private Boolean observedValue;
您可以愉快地将此字段声明为Boolean
type,请注意,如果字符串为空,则此字段值将为null
ObjectMapper mapper = new ObjectMapper()
.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
@JsonProperty("observed")
private Boolean observedValue;
一种解决方案可以是使用自定义JsonDeserializer
public static class StringBooleanDeserializer extends JsonDeserializer<String> {
@Override
public String deserialize(JsonParser parser, DeserializationContext context) throws IOException {
if(parser.getValueAsBoolean()){
return "true";
}else{
if(parser.getTextLength()==0) {
return parser.getText();
}else{
return "false";
}
}
}
}
@JsonProperty("observed")
@JsonDeserialize(using=StringBooleanDeserializer.class)
private String observedValue;
公共静态类StringBooleanDeserializer扩展JsonDeserializer{
@凌驾
公共字符串反序列化(JsonParser解析器、反序列化上下文)引发IOException{
if(parser.getValueAsBoolean()){
返回“真”;
}否则{
if(parser.getTextLength()==0){
返回parser.getText();
}否则{
返回“false”;
}
}
}
}
@JsonProperty(“观察到的”)
@JsonDeserialize(使用=StringBooleanDeserializer.class)
私有字符串observedValue;
同样,您也可以编写自定义JSON序列化程序。您可以尝试将变量类型设置为Object吗?