Создать общий метод ObjectMapper для десериализации нескольких классов POJO - PullRequest
0 голосов
/ 15 апреля 2020

Я создал простой метод ObjectMapper для десериализации моей карты в класс DTO. См. Ниже:

    RequestDTO requestDTO;
    public static requestDTO deserializeRequestBody(HashMap<String,Object> requestMap) {
    try {
    requestDTO = objectMapper.readValue(objectMapper.writeValueAsString(requestMap), RequestDTO.class);
    } catch (JsonProcessingException e) {
                        e.printStackTrace();
    }
    return requestDTO;
    }

В приведенном выше коде requestMap преобразуется в JSON строку с использованием writeValueAsString, а затем используется классом RequestDTO с использованием readValue.

Вопрос: у меня несколько RequestDTO классы (POJO) и я хочу использовать тот же ObjectMapper (как указано выше). Я хочу, чтобы маппер решал, к какому классу POJO сопоставляться, без явной записи его для каждого класса, например:

//Don't want to do this
objectMapper.readValue(objectMapper.writeValueAsString(requestMap), RequestDTO1.class);
objectMapper.readValue(objectMapper.writeValueAsString(requestMap), RequestDTO2.class);
objectMapper.readValue(objectMapper.writeValueAsString(requestMap), RequestDTO3.class);

Я хочу, чтобы класс POJO был разрешен на основе ключей JSON, прочитанных из requestMap, или если есть лучший способ однозначно определить, какой класс должен использоваться для отображения.

1 Ответ

0 голосов
/ 15 апреля 2020

Вы сериализуете Map в JSON объект, а затем анализируете этот JSON объект в экземпляр класса Java. Это выглядит немного сложнее.

Если вы хотите решить, какой класс Java создать для экземпляра, на основе ключей на карте, возможно, реализуйте эту логику c вручную. Посмотрите на ключи карты, решите, какой класс Java создать экземпляр, передайте карту конструктору этого класса, который заполняет члены.

JSON и Джексон не нужны.

...