这个豆子“状态”:
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上阅读这个注释,我不知道什么时候需要使用这个?
除了其他答案之外,如果在没有无参数构造函数的类中使用@JsonCreator注释,那么@JsonProperty注释就非常重要。
public class ClassToSerialize {
public enum MyEnum {
FIRST,SECOND,THIRD
}
public String stringValue = "ABCD";
public MyEnum myEnum;
@JsonCreator
public ClassToSerialize(MyEnum myEnum) {
this.myEnum = myEnum;
}
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
ClassToSerialize classToSerialize = new ClassToSerialize(MyEnum.FIRST);
String jsonString = mapper.writeValueAsString(classToSerialize);
System.out.println(jsonString);
ClassToSerialize deserialized = mapper.readValue(jsonString, ClassToSerialize.class);
System.out.println("StringValue: " + deserialized.stringValue);
System.out.println("MyEnum: " + deserialized.myEnum);
}
}
在本例中,唯一的构造函数被标记为@JsonCreator,因此Jackson将使用该构造函数创建实例。但是输出是这样的:
序列化:{“stringValue”:“ABCD”、“myEnum”:“第一”}
异常
线程“主要”
invalidformatexception:不能
构造的实例
ClassToSerialize MyEnum美元
stringValue:不是已声明Enum的值
实例名:[FIRST, SECOND, THIRD]
但是在构造函数中添加了@JsonProperty注释之后:
@JsonCreator
public ClassToSerialize(@JsonProperty("myEnum") MyEnum myEnum) {
this.myEnum = myEnum;
}
反序列化成功:
Serialized:{“myEnum”:“第一”、“stringValue”:“ABCD”了
StringValue: ABCD
MyEnum:第一