Mkl*_*Rjv 5 java serialization json jackson deserialization
我正在尝试使用ObjectMapper(Jackson)对JSON字符串进行反序列化,并在执行反序列化时排除字段.
我的代码如下:
String aContent = new String(Files.readAllBytes(Paths.get(aFile)));
String bContent = new String(Files.readAllBytes(Paths.get(bFile)));
ObjectMapper mapper = new ObjectMapper();
FilterProvider filterProvider = new SimpleFilterProvider()
.addFilter("_idFilter", SimpleBeanPropertyFilter.serializeAllExcept("_id"));
mapper.setFilterProvider(filterProvider);
JsonNode tree1 = mapper.readTree(aContent);
JsonNode tree2 = mapper.readTree(bContent);
String x = mapper.writeValueAsString(tree1);
return tree1.equals(tree2);
Run Code Online (Sandbox Code Playgroud)
x和tree1以及tree2都包含JSON字符串中的值_id,但不会将其删除.
除了第一步之外,您正在遵循使用过滤器忽略字段
首先,我们需要在 java 对象上定义过滤器:
Run Code Online (Sandbox Code Playgroud)@JsonFilter("myFilter") public class MyDtoWithFilter { ... }
所以目前你应该添加
@JsonFilter("_idFilter")
public class JsonNode {
Run Code Online (Sandbox Code Playgroud)
这是不可能的,因此您需要创建一个扩展JsonNode并使用它的类
@JsonFilter("_idFilter")
public class MyJsonNode extends JsonNode {
Run Code Online (Sandbox Code Playgroud)
如果您不想实现所有抽象方法定义为abstract
@JsonFilter("_idFilter")
public abstract class MyJsonNode extends JsonNode {
}
Run Code Online (Sandbox Code Playgroud)
在你的代码中:
MyJsonNode tree1 = (MyJsonNode) mapper.readTree(aContent);
MyJsonNode tree2 = (MyJsonNode) mapper.readTree(bContent);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
583 次 |
| 最近记录: |