2015-07-10 68 views
1

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

例如,这是我的POJO:

{ 
    "title": "Mrs" 
} 

我的第二个表现与翻译:

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

有一种方式

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

与第一个可用的表示没问题到:

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

回答

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实例处理。

相关问题