什么时候使用@JsonProperty属性,它用于什么?
这个bean'状态':
public class State { private boolean isSet; @JsonProperty("isSet") public boolean isSet() { return isSet; } @JsonProperty("isSet") public void setSet(boolean isSet) { this.isSet = isSet; } }
通过使用ajax'成功'callback的电线发送:
success : function(response) { if(response.State.isSet){ alert('success called successfully) }
这里需要注解@JsonProperty吗? 使用它的优点是什么? 我想我可以删除这个注释而不会造成任何副作用。
在https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations阅读关于这个annotion我不知道这是什么时候需要使用?
这是一个很好的例子。 我使用它来重命名variables,因为JSON来自.Net
环境,其中属性以大写字母开头。
public class Parameter { @JsonProperty("Name") public String name; @JsonProperty("Value") public String value; }
这正确parsing到/从JSON:
"Parameter":{ "Name":"Parameter-Name", "Value":"Parameter-Value" }
我认为OldCurmudgeon和StaxMan都是正确的,但这里只是一个简单的例子。
@JsonProperty(name)通知Jackson ObjectMapper将JSON属性名称映射到带注释的Java字段名称。
//example of json that is submitted "Car":{ "Type":"Ferrari", } //where it gets mapped public static class Car { @JsonProperty("Type") public String type; }
以及现在它的价值… JsonProperty也被用来指定除了通常的序列化和反序列化之外的variables的getter和setter方法。 例如,假设你有这样的负载:
{ "check": true }
和一个Deserializer类:
public class Check { @JsonProperty("check") // It is needed else Jackson will look got getCheck method and will fail private Boolean check; public Boolean isCheck() { return check; } }
那么在这种情况下JsonProperty注释是需要的。 但是,如果你在课堂上也有一个方法
public class Check { //@JsonProperty("check") Not needed anymore private Boolean check; public Boolean getCheck() { return check; } }
看看这个文档: http : //fasterxml.github.io/jackson-annotations/javadoc/2.3.0/com/fasterxml/jackson/annotation/JsonProperty.html
没有注释,推断的属性名称(从JSON匹配)将被“设置”,而不是 – 似乎是意图 – “isSet”。 这是因为按照Java Beans规范,forms“isXxx”和“setXxx”的方法意味着有逻辑属性“xxx”来pipe理。
如你所知,这是所有关于序列化和淡化对象。 假设有一个对象:
public class Parameter { public String _name; public String _value; }
这个对象的序列化是:
{ "_name": "...", "_value": "..." }
variables的名称直接用于序列化数据。 如果您要从系统实现中删除系统api,在某些情况下,您必须重命名序列化/反序列化中的variables。 @JsonProperty是一个元数据告诉串行器如何串行对象。 它用于:
- variables名
- 访问(READ,WRITE)
- 默认值
- 必需/可选
从例子:
public class Parameter { @JsonProperty( value="Name", required=true, defaultValue="No name", access= Access.READ_WRITE) public String _name; @JsonProperty( value="Value", required=true, defaultValue="Empty", access= Access.READ_WRITE) public String _value; }
从JsonProperty javadoc,
定义逻辑属性的名称,即用于属性的JSON对象字段名称。 如果值为空string(这是默认值),将尝试使用注释字段的名称。