【问题标题】:Jackson: property that accepts any jsonJackson:接受任何 json 的属性
【发布时间】:2016-07-29 04:43:31
【问题描述】:

我有一个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:无法反序列化 java.lang.String 的实例超出 START_OBJECT 令牌

【问题讨论】:

标签: java json jackson


【解决方案1】:

@JsonRawValue 仅适用于序列化。

如果您可以将 String 字段更改为 Object,您会没事的。

如果你不能,你可以使用一个简单的自定义反序列化器:

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-20
    • 2013-03-24
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 2021-07-15
    相关资源
    最近更新 更多