#java #generics #jackson
#java #дженерики #джексон
Вопрос:
Теперь у меня есть следующий метод
private classResponse getClassResponse(final Response response) {
try {
return mapper.readValue(mapper.writeValueAsString(response.getEntity()), classResponse.class);
} catch (IOException e) {
log.error("Error while mapping object: {} to classResponse with cause", response.getEntity(), e);
}
return null;
}
Но для каждого отдельного класса я должен создать новый метод для преобразования ответа в класс
Есть ли какой-нибудь способ сделать это универсальным, имея еще один аргумент для имени класса, в который я хочу преобразовать?
Комментарии:
1. Напишите универсальный метод с a
class
в качестве параметра.2.
@SuppresWarnings("unchecked") private <T> T getResponse(final Response response, Class<T> tClass) { ... return (T) ...; }
3. @AnatolyG readValue нуждается в классе во время выполнения, чтобы знать, каким классом должен быть экземпляр, который он создает.
4. Какой у вас вопрос о написании универсального метода?
5. @tgdavies тогда фрагмент dbl должен работать. Но, с моей точки зрения, подобный API говорит, что введите любой тип, и вы получите результат такого типа / я могу работать с любыми типами, но это не похоже на правду. Я бы предпочел иметь несколько методов с определенным / закрытым набором поддерживаемых типов, определенных в / по их сигнатурам
Ответ №1:
Спасибо @dbl за помощь. Подводя итог приведенному ниже ответу,
private <T> T getResponse(final Response response, final Class<T> className) {
try {
return mapper.readValue(mapper.writeValueAsString(response.getEntity()), className);
} catch (IOException e) {
log.error("Error while mapping object: {} to class with cause", response.getEntity(), e);
}
return null;
}