有条件地命名Pojo课程



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

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

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

我正在寻找的是,如何保留相同的Java Pojo类Xyz并将其序列化至XyzLmnXyz

您是否尝试在您的域对象上添加@jsonignoreproperties(ignoreunknown = true)?

一个解决方案是:

  1. 编写发射XyzLmn的客户序列化器
  2. 注册有条件的客户序列化

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

最新更新