Условное именование классов POJO
Наша проблема, наш сервис GET /services/v1/myobject
возвращает объект с именем Xyz
, Это представление используется несколькими существующими клиентами.
Новый сервис GET /services/v2/myobject
нужно выставить точно такой же объект, но с другим именем, скажем XyzLmn
Теперь одно очевидное решение было бы создать два класса Xyz
а также XyzLmn
затем скопируйте Xyz
в XyzLmn
и разоблачить XyzLmn
в v2
,
То, что я ищу, это то, как я могу сохранить тот же класс Java Pojo Xyz
и условно сериализовать его либо XyzLmn
или же Xyz
?
2 ответа
Решение
Одним из решений является:
- Напишите клиентский сериализатор, который испускает
XyzLmn
Зарегистрировать заказчик сериализатора условно
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) в свой объект домена?