POJO 的条件命名 类

Conditional naming of POJO classes

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

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

现在一个明显的解决方案是创建两个 classes XyzXyzLmn,然后将 Xyz 复制到 XyzLmn 并公开 XyzLmnv2.

我正在寻找的是,如何保持相同的 java pojo class Xyz 并有条件地将其序列化为 XyzLmnXyz ?

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

一个解决方案是:

  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);