有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Jackson递归替换匹配字段

考虑到以下情况(从POJO序列化),我需要根据字段名加密字段列表的每次出现,而不管字段的深度如何。例如,我想对文档的某些部分进行加密以供存储(密码和quantityOrdered)

我已经处理了加密部分,但是正在寻找一种好的方法来遍历JsonNode,找到匹配字段的每个匹配项并对其进行加密/替换

隐藏(例如,通过@JsonIgnore无法解决问题,因为我需要存储数据)。这是用于某些系统数据的脱机文件备份

请注意,在我想要匹配的字段中(Passbrow和quantityOrdered),它们的类型不同,密码在不同级别上多次出现

{
  "name":"foo",
  "id":"123456",
  "password":"bar",
  "communities": [
    {
      "name":"administrators",
      "location":"xyz",
      "password":"baz"
    },
    {
      "name":"members",
      "location":"xyz",
      "password":"baz"
    }
  ],
  "quantityOrdered": 35
}

我看到的使用树模型的例子暗示了对文档结构的了解。我看到了JsonNode。getElements()可以用于获取名称的所有元素,但它只返回值,而不返回键。有这方面经验的人能推荐一个好的方法吗


共 (1) 个答案

  1. # 1 楼答案

    您可以使用自定义JsonFilter并覆盖serializeAsField方法

    @Override
    public void serializeAsField(Object bean, JsonGenerator jgen, SerializerProvider prov, BeanPropertyWriter writer) throws Exception {
        if (writer.getName().equals("name")) {
            // encrypt the value
        } else {
            // The property will not be filtered
            writer.serializeAsField(bean, jgen, prov);
        }
    }