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

时间:2017-11-14 19:15:04

标签: java json serialization fasterxml

我有一个对象,我正在尝试映射到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呢)?

1 个答案:

答案 0 :(得分:2)

总结评论中的陈述:如果将布尔字段名称更改为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' - 你没有。

然后它找到方法isEnabled,它看起来像是字段enabled的getter。因此它需要使用键enabled来序列化它。

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