您的示例和 Jackson 的问题是 JSON 属性名称的默认选择:Jackson 将看到isDone
并setDone
选择done
JSON 属性名称。JsonProperty
您可以使用注释覆盖此默认选择:
public class Status
{
private boolean isDone;
@JsonProperty("isDone")
public boolean isDone()
{
return this.isDone;
}
@JsonProperty("isDone")
public void setDone(boolean isDone)
{
this.isDone = isDone;
}
}
然后:
Status instance = new Status();
String jsonString = null;
instance.setDone(true);
ObjectMapper mapper = new ObjectMapper();
jsonString = mapper.writeValueAsString(instance);
现在jsonString
包含{ "isDone" : true }
. 请注意,您还可以将字符串写入OutputStream
using ObjectMapper.writeValue(OutputStream, Object)或Writer
using ObjectMapper.writeValue(Writer, Object)。
在这种情况下,您实际上只需要JsonProperty
任一访问器上的注释,而不是两者。只需注释即可isDone
获得所需的 JSON 属性名称。
使用JsonProperty
注释的另一种方法是重命名您的访问器setIsDone/getIsDone
。那么注释是不必要的。
请参阅快速而肮脏的杰克逊教程:杰克逊在 5 分钟内。对特定属性的理解来自于查看 Jackson 注释的文档。