我需要将JSON字符串解析为Java。这是一个动态菜单解析,我必须在其中检查元素“角色”,以查看是否将其包含在最终的Java HashMap中。
我认为我想在反序列化时检查权限,因此我不必再次遍历整个树,而无需拉出“未授权”菜单项。
因此,我编写了一个自定义解串器,如下所示:
public Map<String,List<MenuItem>> deserialize(JsonParser parser, DeserializationContext deserializer) throws IOException {
etc...
if(objNode.get("permission")!=null) {
item.setType(objNode.get("type").asText());
}
}
我这样称呼它:
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(Map.class, new NavigationDeserializer());
mapper.registerModule(module);
json = getJson();
nav = (Map<String, List<MenuItem>>) mapper.readValue(json, new TypeReference<Map<String,List<MenuItem>>>(){});
但是,我需要在反序列化器本身中嵌入一些可以访问安全系统(即服务)的东西。
想法?