杰克逊在一个POJO中反序列化了两个不同的Json表示

时间:2015-07-10 04:58:11

标签: java json jackson

是否可以在同一个pojo对象中反序列化两个不同的表示,例如,当可以返回可选的翻译时。

例如,这是我的pojo:

class LightCustomer {
  enum TITLE {
    Mr, Mrs, Ms
  }
  public TITLE title;
  public String titleLabel;
}

第一次可用的表示没问题:

{
  "title": "Mrs"
}

我的第二个翻译代表:

{
  "title": {
    "value": "Mrs",
    "label": "Madame"
  }
}

有办法:

  • 在LightCustomer.setTitle()中反序列化“title”或“title.value”?
  • 在LightCustomer.setTitleLabel()中反序列化“title.label”?

1 个答案:

答案 0 :(得分:0)

您可以使用@JacksonRootName进行第二次演示。

@JsonRootName(value = "title")
class LightCustomer {
  enum TITLE {
    Mr, Mrs, Ms
  }
  public TITLE title;
  public String label;
}

使用

配置ObjectMapper实例
mapper.configure(Feature.UNWRAP_ROOT_VALUE, true); //version 1.9

mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); //version 2

例如,您可以使用不同的ObjectMapper实例。我不完全确定这是不是一个好主意。也许是一种更好的方法:创建自定义序列化器/反序列化器,允许两个表示由ObjectMapper的单个实例处理。