我如何告诉杰克逊忽略JSON名称?
我有以下pojo:
class MyPojo {
private String ABCName;
}
当我有:
时" abcname":" foo",那么杰克逊不认识到它会引发错误。
它的期望是:
" abcname":" foo"。
代码:
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.ObjectMapper;
public class TestJackson {
public static void main(String args[]) throws Exception {
ObjectMapper mapper = new ObjectMapper();
MyPojo my = new MyPojo();
my.setABCName("Foo");
System.out.println(mapper.writeValueAsString(my));
}
private static class MyPojo {
private String ABCName;
public void setABCName(String ABCName) {
this.ABCName = ABCName;
}
public String getABCName() {
return ABCName;
}
}
}
输出:{" abcname":" foo"}
然后,我尝试使用:@jsonproperty(" abcname")
尝试注释abcname我注释并运行了代码后,这就是我得到的:{" abcname":" foo"," abcname":" foo"}
它导致重复。
我有一个JSON客户端,它将发送为:" abcname":" foo",我需要在杰克逊(Jackson)进行处理。
有任何解决方法吗?
感谢您的时间。
您可以尝试Genson http://code.google.com/p/genson/。以下代码应产生您期望的结果。
String json = "{"ABCName" : "foo"}";
MyPojo my = new MyPojo();
my.setABCName("Foo");
Genson genson = new Genson();
System.out.println(genson.serialize(my));
System.out.println(genson.deserialize(json, MyPojo.class).ABCName);
public static class MyPojo {
private String ABCName;
public void setABCName(String ABCName) {
this.ABCName = ABCName;
}
@JsonProperty("ABCName") public String getABCName() {
return ABCName;
}
}
实际上与杰克逊本身一起使用:
public class MyPojo {
private String ABCName;
public void setABCName(String ABCName) {
this.ABCName = ABCName;
}
@JsonProperty("ABCName")
public String getABCName() {
return ABCName;
}
}
结果:{" abcname":" foo"}
但是,当您注释该字段时,它会导致重复项,这意味着以下内容没有起作用:
public class MyPojo {
@JsonProperty("ABCName")
private String ABCName;
public void setABCName(String ABCName) {
this.ABCName = ABCName;
}
public String getABCName() {
return ABCName;
}
}
结果:{" abcname":" foo"," abcname":" foo"}
看来注释必须高于getter方法。
非常感谢。
您可以通过以下方式设置注释Intospector
来尝试杰克逊本身公共类TestJackson {
public static void main(String args[]) throws Exception {
ObjectMapper mapper = new ObjectMapper();
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
mapper.setAnnotationIntrospector(introspector);
MyPojo my = new MyPojo();
my.setABCName("Foo");
System.out.println(mapper.writeValueAsString(my));
}
private static class MyPojo {
@JsonProperty("ABCName")
private String ABCName;
public void setABCName(String ABCName) {
this.ABCName = ABCName;
}
public String getABCName() {
return ABCName;
}
}
}