Java 处理Jackson中属性的布尔值和空字符串?

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

我有一个JSON属性,可以是

{ "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吗?