Условное именование классов POJO

Наша проблема, наш сервис GET /services/v1/myobject возвращает объект с именем Xyz, Это представление используется несколькими существующими клиентами.

Новый сервис GET /services/v2/myobject нужно выставить точно такой же объект, но с другим именем, скажем XyzLmn

Теперь одно очевидное решение было бы создать два класса Xyz а также XyzLmnзатем скопируйте Xyz в XyzLmn и разоблачить XyzLmn в v2,

То, что я ищу, это то, как я могу сохранить тот же класс Java Pojo Xyz и условно сериализовать его либо XyzLmn или же Xyz?

2 ответа

Решение

Одним из решений является:

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

Вы пытаетесь добавить @JsonIgnoreProperties(ignoreUnknown = true) в свой объект домена?

Другие вопросы по тегам