@JsonProperty 似乎只适用于非布尔成员
@JsonProperty seems to only work for non boolean members
我有一个对象正在尝试映射到 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 序列化对象时,它会查找字段和 getters。
在您的例子中,它找到了布尔字段 isEnabled
并使用 custom_name
对其进行了序列化。
然后它从处理中排除了此布尔字段的 getter - 可能要排除的 getter 名称是 getIsEnabled
和 'isIsEnabled' - 你没有。
然后它找到看起来像字段 enabled
的 getter 的方法 isEnabled
。所以它获取它的值并用键 enabled
.
序列化它
同样,问题是您不应该使用前缀 is
.
命名布尔字段
对于最终出现在这里的任何其他人:这也可能是由不正确的导入引起的。
就我而言,我应该使用:
import com.fasterxml.jackson.annotation.JsonProperty;
但是我错误地导入了
import org.codehaus.jackson.annotate.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 序列化对象时,它会查找字段和 getters。
在您的例子中,它找到了布尔字段 isEnabled
并使用 custom_name
对其进行了序列化。
然后它从处理中排除了此布尔字段的 getter - 可能要排除的 getter 名称是 getIsEnabled
和 'isIsEnabled' - 你没有。
然后它找到看起来像字段 enabled
的 getter 的方法 isEnabled
。所以它获取它的值并用键 enabled
.
同样,问题是您不应该使用前缀 is
.
对于最终出现在这里的任何其他人:这也可能是由不正确的导入引起的。
就我而言,我应该使用:
import com.fasterxml.jackson.annotation.JsonProperty;
但是我错误地导入了
import org.codehaus.jackson.annotate.JsonProperty;