[英]How to tell to Jackson ObjectWriter ignore from class member during write
I'm using Java. 我正在使用Java。
I have the following class: 我有以下课程:
class MyClass{
@JsonProperty("test")
String test;
String myPrivateTest;
}
I'm using Jackson ObjectWriter
to write my JSON object to file/as string as follow: 我正在使用Jackson ObjectWriter
将JSON对象写入文件/字符串,如下所示:
ObjectWriter writer = objMapper.writer(new DefaultPrettyPrinter());
writer.writeValue(new File(path), myObject);
I want to write to file only test
member and not myPrivateTest, How can I do it? 我只想将test
成员而不是myPrivateTest写入文件,该怎么办?
EDIT 编辑
I have been tried with: 我已经尝试过:
class MyClass{
@JsonProperty("test")
String test;
@JsonIgnore
String myPrivateTest;
}
And with 与
@JsonIgnoreProperties({"myPrivateTest"})
class MyClass{
@JsonProperty("test")
String test;
String myPrivateTest;
}
And It is still write myPrivateTest to the file 而且它仍然将myPrivateTest写入文件
You can ignore specific fields with providing PropertyFilter as below : 您可以通过提供PropertyFilter来忽略特定字段,如下所示:
@JsonFilter("someFilter")
@Data // lombok
@NoArgsConstructor // lombok
class SomeClass {
private String name;
private int someField;
public SomeClass(String name, int sf){
this.name=name;
this.someField = sf;
}
}
@Test
public void test() throws JsonProcessingException {
SomeClass someClass = new SomeClass("test",1);
ObjectMapper mapper = new ObjectMapper();
PropertyFilter theFilter = new SimpleBeanPropertyFilter() {
@Override
public void serializeAsField
(Object pojo, JsonGenerator jgen, SerializerProvider provider, PropertyWriter writer)
throws Exception {
if (include(writer)) {
// here you can define the properties to ignore
if (!writer.getName().equals("name")) {
writer.serializeAsField(pojo, jgen, provider);
return;
}
} else if (!jgen.canOmitFields()) {
writer.serializeAsOmittedField(pojo, jgen, provider);
}
}
};
FilterProvider filters = new SimpleFilterProvider()
.addFilter("someFilter", theFilter);
String objAsString = mapper
.writer(filters)
.writeValueAsString(someClass);
assertThat(objAsString).doesNotContain("name");
}
Serialized output is : 序列化输出为:
{"someField":1}
Using Jackson 2.9.6 使用杰克逊2.9.6
Just adding the @JsonProperty
to the fields you want is enough. 只需将@JsonProperty
添加到所需字段即可。
public class MyClass {
@JsonProperty("test")
String test;
String myPrivateTest;
public static void main(String[] args) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
MyClass c = new MyClass();
c.test = "HELLO";
c.myPrivateTest = "WORLD";
System.out.println(objectMapper.writeValueAsString(c));
}
}
Output: 输出:
{"test":"HELLO"}
String myPrivateTest
is correctly ignored String myPrivateTest
被正确忽略
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.