我有一些代码需要输入json并使用Jackson和“treeToValue”方法将其转换为简单的java类(pojo),much like the example here:
MyBean bean = mapper.treeToValue(node, MyBean.class);
我希望能够处理json中所有节点值的文本,以扫描可能的XSS攻击,并根据需要对HTML进行编码。
无论如何使用treeToValue执行此操作?或者readValue很容易?我想添加一个排序回调,这样当解析一个节点值时,它允许我按照我认为合适的方式更改节点文本。我查看了源代码,我想我可能需要派生一个自定义的TreeTraversingParser才能很好地执行此操作,并覆盖“getText”....
有什么更好的建议吗?
答案 0 :(得分: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);