Я пытаюсь сериализовать и десериализовать класс Java
, используя Jackson
, а JsonPropertyOrder
зависит от значения поля version
в классе. Если version = 1
, я хочу, чтобы заказ был {"start1", "start2"}
, если version = 2
, заказ должен быть {"end1", "end2"}
.
У меня ниже класса:
@Builder
@Value
@AllArgsConstructor(onConstructor=@__(@JsonCreator))
@JsonPropertyOrder(custom property order depending on version field)
public class ClassA {
@NonNull Integer version;
@NonNull String start1;
@NonNull String start2;
@NonNull String end1;
@NonNull String end2;
}
Как определить JsonPropertyOrder
в зависимости от версии во время выполнения. Если мне нужно использовать пользовательский Deserializer
, я не могу понять, как именно он должен быть реализован и установлен с помощью ObjectMapper
.
Это код для десериализации:
private final ObjectMapper objectMapper = new ObjectMapper();//have initialzed this as a bean
String jsonStr = "{\"version\":1, \"startLat\":\"47.6812\", \"startLng\":\"-122.3268\", \"endLat\":\"47.6074\", \"endLng\":\"-122.3377\"}";
ClassA objA = null;
try {
objA = objectMapper.readValue(jsonStr, ClassA.class);
} catch (IOException e) {
log.error("Error deserializing the string", jsonStr, e);
}
return objA;
** РЕДАКТИРОВАТЬ: я пропустил имп части. Порядок свойств здесь имеет значение, потому что сериализованная строка может не иметь имен полей. Это возможно сделать?
Таким образом, str [1, "47.6812", "-122.3268"]
нужно будет десериализовать до версии полей, start1
, start2
.