POJO类的条件命名

时间:2017-02-25 20:20:35

标签: rest serialization pojo annotated-pojos

我们的问题是,我们的服务GET /services/v1/myobject返回名为Xyz的对象。此表示由多个现有客户端使用。

新服务GET /services/v2/myobject需要公开完全相同但具有不同名称的对象,例如XyzLmn

现在一个明显的解决方案是创建两个类XyzXyzLmn,然后将Xyz复制到XyzLmn并在{{1}中公开XyzLmn }}

我正在寻找的是,如何保持相同的java pojo类v2并有条件地将其序列化为XyzXyzLmn

2 个答案:

答案 0 :(得分:0)

您是否尝试在域对象上添加@JsonIgnoreProperties(ignoreUnknown = true)?

答案 1 :(得分:0)

一个解决方案是:

  1. 编写一个发出XyzLmn
  2. 的客户序列化程序
  3. 有条件地注册客户序列化程序

    public class XyzWrapperSerializer extends StdSerializer<Item> {
    
    public ItemSerializer() {
        this(null);
    }
    
    public ItemSerializer(Class<Item> t) {
        super(t);
    }
    
    @Override
    public void serialize(
      Item value, JsonGenerator jgen, SerializerProvider provider) 
      throws IOException, JsonProcessingException {
    
        jgen.writeStartObject();
        jgen.writeNumberField("XyzLmn", value.id);
        jgen.writeEndObject();
    } }
    
    XyzWrapper myItem = new XyzWrapper(1, "theItem", new User(2, "theUser"));
    ObjectMapper mapper = new ObjectMapper();
    
    SimpleModule module = new SimpleModule();
    module.addSerializer(XyzWrapper.class, new XyzWrapperSerializer());
    mapper.registerModule(module);
    
    String serialized = mapper.writeValueAsString(myItem);