2014-02-28 75 views
0

我有一些代码,需要一些输入JSON并将其转换成用杰克逊和“treeToValue”的方法,much like the example here一个简单的Java类(一个POJO):Jackson - 在使用treeToValue时在Json节点中处理文本?

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

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

有没有办法用treeToValue做到这一点?或readValue容易吗?我想添加一个回调类,所以当节点值被解析时,它允许我改变节点文本,因为我认为合适。我看了看源,我想我可能要导出自定义TreeTraversingParser做到这一点很好,并覆盖“的getText” ......

什么更好的建议?

回答

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); 
相关问题