Java Jackson-如何基于json内容应用自定义反序列化?
假设我有以下json:Java Jackson-如何基于json内容应用自定义反序列化?,java,jackson,Java,Jackson,假设我有以下json: { "first_path": "/just/a/path", "second_path": "/just/another/path", "relative_path": { "$relative": "some_file" }, } 我有一个我不能修改的类: public class Paths { public String first_path; public String second_path; public S
{
"first_path": "/just/a/path",
"second_path": "/just/another/path",
"relative_path": { "$relative": "some_file" },
}
我有一个我不能修改的类:
public class Paths {
public String first_path;
public String second_path;
public String third_path; // Can't mark this with annotations
}
我想要的是对所有字符串值应用一些自定义反序列化逻辑,如果它们看起来像json中的{“$…”:“…”}。在我的示例中,我显然要根据一些逻辑将相对路径转换为绝对路径,并将绝对路径转换为Paths.third_path成员
如何使用Jackson实现这一点?在花了几个小时之后,我找到了通过以下方式覆盖字符串反序列化来实现这一点的方法:
public class PathJsonDeserializer extends JsonDeserializer<String> {
@Override
public String deserialize(JsonParser parser, DeserializationContext context)
throws IOException, JsonProcessingException {
JsonToken token = parser.getCurrentToken();
if (token.equals(JsonToken.START_OBJECT)) {
// This String value looks like an object - try to parse $relative
Path path = parser.readValueAs(Path.class);
return path.$relative;
} else {
// This is normal String value
return parser.getText();
}
}
}
PathJsonDeserializer应该像往常一样通过模块添加到映射器中。
是否还有其他更多的组件方法?对于这种情况,如果我有几个不同逻辑的基于$的规则
public class Path {
public String $relative;
}