我有一个User类,我想使用Jackson映射到JSON。
public class User {
private String name;
private int age;
prviate int securityCode;
// getters and setters
}
我使用 -
将其映射到JSON字符串User user = getUserFromDatabase();
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
我不想映射securityCode
变量。有没有办法配置映射器以便它忽略这个字段?
我知道我可以编写自定义数据映射器或使用Streaming API但我想知道是否可以通过配置来完成它?
答案 0 :(得分:59)
您有两种选择:
杰克逊的工作场所是吸气者。因此,您可以删除要在JSON中省略的字段的getter。 (如果你不需要在其他地方使用吸气剂。)
或者,您可以在该字段的getter方法上使用@JsonIgnore
annotation of Jackson,您会看到结果JSON中没有这样的键值对。
@JsonIgnore
public int getSecurityCode(){
return securityCode;
}
答案 1 :(得分:12)
您还可以收集注释类的所有属性
@JsonIgnoreProperties( { "applications" })
public MyClass ...
String applications;
答案 2 :(得分:10)
在此添加此内容,因为其他人可能会在将来再次搜索此内容,例如我。本答案是Accepted Answer
的扩展You have two options:
1. Jackson works on setters-getters of fields. So, you can just remove getter of field which you want to omit in JSON. ( If you don't need getter at other place.)
2. Or, you can use the `@JsonIgnore` [annotation of Jackson][1] on getter method of that field and you see there in no such key-value pair in resulted JSON.
@JsonIgnore
public int getSecurityCode(){
return securityCode;
}
实际上,较新版本的Jackson为JsonProperty添加了READ_ONLY和WRITE_ONLY注释参数。所以你也可以这样做。
@JsonProperty(access = Access.WRITE_ONLY)
private String securityCode;
而不是
@JsonIgnore
public int getSecurityCode(){
return securityCode;
}
答案 3 :(得分:6)
如果您不想在Pojos上添加注释,您也可以使用Genson。
以下是如何使用它来排除没有任何注释的字段(如果需要,也可以使用注释,但您可以选择)。
Genson genson = new Genson.Builder().exclude("securityCode", User.class).create();
// and then
String json = genson.serialize(user);
答案 4 :(得分:1)
你可以使用@JsonIgnore注释 http://wiki.fasterxml.com/JacksonAnnotations
答案 5 :(得分:1)
如果您使用GSON,则必须将字段/成员声明标记为@Expose并使用GsonBuilder()。excludeFieldsWithoutExposeAnnotation()。create()
请勿忘记使用@Expose标记子类,否则字段不会显示。
答案 6 :(得分:0)
我遇到过类似的情况,我需要一些属性要反序列化(从JSON到对象)但不序列化(从对象到JSON)
首先我去@JsonIgnore
-它确实防止了不需要的属性的序列化,但是也未能对其进行反序列化。尝试使用value
属性也无济于事,因为它需要一些条件。
最后,将@JsonProperty
与access
属性一起使用就像一种魅力。
答案 7 :(得分:0)
字段级别:
public class User {
private String name;
private int age;
@JsonIgnore
private int securityCode;
// getters and setters
}
课程级别:
@JsonIgnoreProperties(value = { "securityCode" })
public class User {
private String name;
private int age;
private int securityCode;
}