Это потому, что не существует метода ObjectMapper::readValue
, который принимает Object
в качестве первого аргумента.
По умолчанию при вашем подходе Джексон десериализует ваше поле data
до LinkedHashMap
, потому что вы его далиObject
type.
Чтобы затем десериализовать это значение вручную, вам нужно будет использовать ObjectMapper::convertValue
и передать Cars.class
в качестве аргумента:
Cars cw = mapper.convertValue(mw.getData(), Cars.class);
А такжеизбавьтесь от:
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
, поскольку здесь это, по-видимому, не нужно.
И просто добавлю, я не уверен, что подход с такими динамическими данными хорош, потому что, если выбудет создавать все больше и больше типов объектов, в результате вы получите башню с ifs
или оператором колозального переключателя.