Jackson - 使用 treeToValue 时处理 Json 节点中的文本?

问题描述 投票:0回答:1

我有一些代码,它需要一些输入 json 并使用 Jackson 和“treeToValue”方法将其反序列化为一个简单的 java 类(pojo),很像这里的示例

   MyBean bean = mapper.treeToValue(node, MyBean.class);

我希望能够处理 json 中所有节点值的文本,以扫描可能的 XSS 攻击,并根据需要对 HTML 进行编码。

有没有办法用treeToValue 来做到这一点?或者轻松读取值?我只想添加某种回调,以便在解析节点值时,它允许我根据需要更改节点文本。我查看了源代码,我想我可能必须派生一个自定义 TreeTraversingParser 才能很好地完成此操作,并覆盖“getText”....

还有更好的建议吗?

java json jackson
1个回答
1
投票

事实证明这可以使用自定义 ObjectMapper 来完成!

public CustomObjectMapper()
{
    super();

    SimpleModule stringModule = new SimpleModule("StringModule", new Version(1, 0, 0, null)).addDeserializer(String.class, new CustomStringDeserializer());
    registerModule(stringModule);
}

private static class CustomStringDeserializer extends JsonDeserializer<String>
{

    @Override
    public String deserialize(JsonParser parser, DeserializationContext context) throws IOException
    {
        if (parser.getCurrentToken() == JsonToken.VALUE_STRING)
        {
           String text = parser.getText();

           // Do whatever you want to the text here

           return text;
        }
    }
}

然后,当您使用自定义对象映射器调用

treeToValue
时,它将使用
deserialize
方法处理您的节点。

   CustomObjectMapper mapper = new CustomObjectMapper();
   MyBean bean = mapper.treeToValue(node, MyBean.class);
© www.soinside.com 2019 - 2024. All rights reserved.