Десериализация ObjectMapper установить все поля = NULL - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть суперкласс:

@Getter
@Setter
public abstract class AbstractDto {

    @NotNull
    protected String num;
}

И подкласс:

@Getter
@Setter
public class SomeDto extends AbstractDto {

    @NotNull
    private Long id;
}

Когда я сериализую его, все в порядке:

{"num":"5600511164","id":22}

Но когда я пытаюсь для десериализации я получаю все поля как * null в SomeDto.

Я использую эту конфигурацию

@Bean
public ObjectMapper objectMapper (Jackson2ObjectMapperBuilder builder) {
 return builder.createXmlMapper(false).build();
}

Я думаю, что проблема в использовании суперкласса, но я не знаю, как исправить Это. Без суперкласса всегда нормально работает.

UPD. Сериализуйте так:

protected String marshall(Object message) throws JsonProcessingException {
  return this.objectMapper.writeValueAsString(message);
}

Десериализуйте так:

protected T unmarshall(byte[] body) throws IOException {
  return objectMapper.readValue(body, resolveType());
}

resolveType() верните мне SomeDto.class

UPD. Решаемые. Проблема была в теле, это не только {"num":"5600511164","id":22}, но и другая информация.

...