什么时候使用@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(这是默认值),将尝试使用注释字段的名称。