这个“状态”:
public class State {
private boolean isSet;
@JsonProperty("isSet")
public boolean isSet() {
return isSet;
}
@JsonProperty("isSet")
public void setSet(boolean isSet) {
this.isSet = isSet;
}
}
使用ajax“success”回调通过有线发送:
success : function(response) {
if(response.State.isSet){
alert('success called successfully)
}
这里需要注解@jsonproperty吗?使用它有什么好处?我想我可以删除这个注解而不引起任何副作用。
阅读此注解https://github.com/fasterxml/jackson-annotations/wiki/jackson-annotations 我不知道什么时候需要用这个?
9条答案
按热度按时间o7jaxewo1#
如果没有注解,推断出的属性名(与json匹配)将是“set”,而不是——似乎是意图——是“isset”。这是因为根据javabeans规范,形式为“is”和“set”的方法意味着要管理逻辑属性“”。
63lcw9qa2#
我认为oldcurmudgeon和staxman都是正确的,但这里有一个简单的例子回答你一句话。
@jsonproperty(name)告诉jackson objectmapper将json属性名Map到带注解的java字段名。
k10s72fa3#
如您所知,这完全是关于序列化和淡化对象的。假设有一个对象:
此对象的序列化为:
变量名直接用于序列化数据。如果要从系统实现中删除系统api,在某些情况下,必须在序列化/反序列化中重命名变量@jsonproperty是一个元数据,它告诉序列化程序如何序列化对象。用于:
变量名
访问(读、写)
默认值
必需/可选
例如:
svdrlsy44#
这是一个很好的例子。我使用它来重命名变量,因为json来自
.Net
属性以大写字母开头的环境。这将正确解析json:
0x6upsns5#
不管它现在值多少钱。。。除了通常的序列化和反序列化之外,jsonproperty还用于为变量指定getter和setter方法。例如,假设您有这样一个有效负载:
和反序列化程序类:
在这种情况下,需要jsonproperty注解。但是,如果类中还有一个方法
也请看一下此文档:http://fasterxml.github.io/jackson-annotations/javadoc/2.3.0/com/fasterxml/jackson/annotation/jsonproperty.html
rjee0c156#
来自jsonproperty javadoc,
定义逻辑属性的名称,即用于属性的json对象字段名称。如果值为空字符串(这是默认值),则将尝试使用已注解字段的名称。
eqfvzcg87#
添加jsonproperty还可以确保安全性,以防有人决定更改其中一个属性名,但没有意识到所讨论的类将被序列化为json对象。如果更改了属性名,jsonproperty将确保在json对象中使用它,而不是属性名。
zujrkrfu8#
除了以上所有的答案,别忘了文档中提到
标记注解,可用于将非静态方法定义为逻辑属性的“setter”或“getter”(取决于其签名),或将非静态对象字段定义为逻辑属性(序列化、反序列化)。
如果你有
non-static
在你的课堂上不是一个传统的方法getter or setter
然后你可以让它像一个getter and setter
用上面的注解。请参见下面的示例当上述对象被序列化时,响应将包含
用户名来自
getUsername()
id来自getId()
idandusername来自getIdAndUsername
*因为这个方法
getIdAndUsername
开始于get
然后它被视为普通的getter,因此,为什么可以用@JsonIgnore
.如果你注意到
concatenateIdAndUsername
不会返回,这是因为它的名称不以get
如果您希望该方法的结果包含在响应中,那么您可以使用@JsonProperty("...")
这将被视为正常getter/setter
如上述突出显示的文档所述。f45qwnt89#
除了其他答案,
@JsonProperty
如果您使用@JsonCreator
没有无参数构造函数的类中的注解。在本例中,唯一的构造函数被标记为
@JsonCreator
,因此jackson将使用此构造函数创建示例。但结果是:序列化:{“stringvalue”:“d”,“myenum”:“first”}
线程“main”com.fasterxml.jackson.databind.exc.invalidformatexception中出现异常:无法从字符串值“stringvalue”构造classtoserialize$myenum的示例:值不是声明的枚举示例名称之一:[first,second,third]
但在加入
@JsonProperty
构造函数中的注解:反序列化成功:
序列化:{“myenum”:“first”,“stringvalue”:“d”}
stringvalue:d
髓鞘:第一个