我有一个pojo:
public class A {
public int a;
public String anyJson1;
public String anyJson2;
public String anyJson3;
}
我希望anyJsonX
字段接受任何json。例如:
{"a":5, "anyJson1":[1,2,3], "anyJson2:4, "anyJson3":{"c":"d"}}
我试图将@JsonRawValue
放在这些字段上,但没有成功
嵌套异常是com.fasterxml.jackson.databind.JsonMappingException:无法从START_OBJECT标记中反序列化java.lang.String的实例
答案 0 :(得分:6)
@JsonRawValue仅适用于序列化。
如果你可以将字符串字段更改为对象,你会没事的。
如果你不能,你可以使用一个简单的自定义反序列化器:
public class AnythingToString extends JsonDeserializer<String> {
@Override
public String deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
TreeNode tree = jp.getCodec().readTree(jp);
return tree.toString();
}
}
然后在你的模型中使用它:
public static class A {
public A() {}
private int a;
@JsonDeserialize(using = AnythingToString.class)
private String anyJson1;
@JsonDeserialize(using = AnythingToString.class)
private String anyJson2;
@JsonDeserialize(using = AnythingToString.class)
private String anyJson3;