У меня есть класс, который я хочу десериализовать, вызывая конструктор с одним методом, который принимает полный объект json как String:

public class MyDataObject {

    @IwantObjectMapperToCallThisWhenDeserializing
    public MyDataObject(String json) {
      // custom logic
    }
}

Можно ли добиться только простыми аннотациями без реализации моего собственного JsonDeserializer?

0
Dariusz 7 Дек 2020 в 11:59

1 ответ

Лучший ответ

Я не нашел прямого способа сделать это, но вот обходной путь:

public class MyDataObject {

    @JsonCreator(mode = Mode.DELEGATING)
    // passed object is a Map, but as long as the type is serializable below, it can by any type
    public MyDataObject(Object map) {
        String json;
        try {
            json = new ObjectMapper().writeValueAsString(map);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("Error deserializing MyDataObject", e);
        }
        // custom logic
    }
}
0
Dariusz 7 Дек 2020 в 09:29