@JsonProperty似乎只适用于非布尔成员



>我有一个对象,我正在尝试映射到JSON,除了布尔成员之外,一切似乎都非常出色,如下所示:

public class Foo implements Serializable {
    @JsonProperty("this_does_not_work")
    private boolean isBar;
    @JsonProperty("this_works")
    private int bar;
    @JsonProperty("this_works_too")
    public boolean isBar() {
        return isBar;
    }
}

这将序列化为:

{
    this_works: ...,
    this_works_too: ...    
}

为什么布尔成员不能有@JsonProperty(但他们的getter有(?

总结注释中的语句:如果将布尔字段名称更改为 enabled

@JsonProperty("custom_name")
private boolean enabled;
public boolean isEnabled() {
    return enabled;
}
public void setEnabled(boolean isEnabled) {
    this.enabled = isEnabled;
}

它将提供所需的输出{ "custom_name" : true }

最初的问题是没有遵循java字段命名约定:

@JsonProperty("custom_name")
@Column(name = "fl_enabled")
private boolean isEnabled;
public boolean isEnabled() {
    return isEnabled;
}
public void setEnabled(boolean isEnabled) {
    this.isEnabled = isEnabled;
}

当 FasterXML 序列化对象时,它会查找字段和 getter。

在您的情况下,它找到了布尔字段isEnabled并使用 custom_name 对其进行序列化。

然后它从处理中排除了这个布尔字段的 getter - 要排除的可能 getter 名称是 getIsEnabled 和 'isIsEnabled' - 你没有任何。

然后它找到看起来像字段enabled的获取器的方法isEnabled。因此,它获取其值并使用键enabled对其进行序列化。

所以同样,问题是你不应该用前缀命名布尔字段 is .

对于最终来到这里的任何其他人:这也可能是由不正确的导入引起的。

就我而言,我应该使用:

import com.fasterxml.jackson.annotation.JsonProperty;

但相反,我错误地导入了

import org.codehaus.jackson.annotate.JsonProperty;

相关内容

  • 没有找到相关文章

最新更新