Как полностью печатать Java Bean с помощью отражения или любой другой утилиты
У меня есть Java bean class Person
, содержащий 3 переменные:
- name (String)
- age (String)
- адрес (объект).
Address
содержит 3 переменные:
Я хотел бы иметь утилиту, которая должна печатать все переменные в Person
.
Под этим я подразумеваю, что он должен печатать Person
, а также содержащийся в нем объект Address
.
Я мог бы создать хэш-карту и поместить имена переменных и значения с помощью отображения и отображения ключа/значения в пользовательском интерфейсе JSP, но проблема в том, что я должен применить отражение для Address
, чтобы добавить переменную/значение в hashmap.
Есть ли доступная утилита для этого?
Ответы
Ответ 1
Вы можете использовать ToStringBuilder из Apache Commons.
Из документации:
Типичный вызов для этого метода будет выглядеть так:
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
Подробнее:
Этот класс позволяет создать хороший и последовательный toString() для любой класс или объект. Этот класс предназначен для упрощения процесса:
позволяет имена полей обрабатывать все типы, последовательно обрабатывая нули последовательный вывод массивов и многомерных массивов уровень детализации, который необходимо контролировать для обработки объектов и коллекций иерархии классов. Чтобы использовать этот класс, напишите код следующим образом:
public class Person {
String name;
int age;
boolean smoker;
...
public String toString() {
return new ToStringBuilder(this).
append("name", name).
append("age", age).
append("smoker", smoker).
toString();
}
}
В качестве альтернативы существует метод, который использует отражение для определения поля для проверки. Поскольку эти поля обычно являются частными, метод, reflectionToString, использует AccessibleObject.setAccessible для изменения видимость полей. Это приведет к сбою под управлением безопасности, если соответствующие разрешения не установлены правильно. Это также медленнее, чем тестирование явно. Типичный вызов для этого метода будет выглядеть так:
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
Ответ 2
Возможно, вы ищете Apache Commons ToStringBuilder#reflectionToString(Object)
.
Ответ 3
Вы можете реализовать метод toString
, чтобы распечатать все, что захотите, или вы можете использовать Apache Commons ToStringBuilder
http://commons.apache.org/lang/api-2.3/org/apache/commons/lang/builder/ToStringBuilder.html и его метод reflectionToString
. Я не верю, что это повторится через свойства (например, адрес), но если вы хотите увидеть адрес, распечатанный с помощью Street, Door No и City, используйте метод toString
, чтобы распечатать эту информацию.
Ответ 4
Вы можете найти полезный для этой цели Jackson JSON serializer. Библиотека Jackson уже может быть частью вашего стека. Если нет, найдите необходимые зависимости ниже.
private static final ObjectMapper OBJECT_MAPPER_SINGLETON = new ObjectMapper();
public static String toStringUsingJackson(final Object object) {
try {
return OBJECT_MAPPER_SINGLETON.writeValueAsString(object);
} catch (final JsonProcessingException e) {
return String.valueOf(object);
}
}
Пример вывода:
{ "name": "John Doe", "age": 42}
Обязательные зависимостей maven/ gradle:
- jackson-core, groupId = com.fasterxml.jackson.core
- jackson-databind, groupId = com.fasterxml.jackson.core