#java #object #tostring #lombok
#ява #объект #tostring #ломбок #java
Вопрос:
Мне нужно решить интересную проблему.
Давайте рассмотрим следующие классы (Person и Phone):
Человек
@AllArgsConstructor
@Getter
@Setter
@ToString
public class Person {
private String name;
private int age;
private Telephone telephone;
}
Телефон
@AllArgsConstructor
@Getter
@Setter
@ToString
public class Telephone {
private int codeArea;
private String number;
}
И предположим, что у меня есть строка объекта Person, сгенерированная аннотацией lombok @toString:
Person(name=John, age=30, telephone=Telephone(codeArea=16, number=1111-2222))
Как я могу снова преобразовать приведенную выше строку в объект? Есть ли какая-нибудь библиотека, которая может помочь мне в этом процессе, или я должен вручную создать для нее анализатор?
Я знаю, что есть другие способы, такие как генерация json или сериализация в виде объекта Java, а затем преобразование его обратно. Однако сейчас это не решение для меня, так как мне приходится работать со строкой, упомянутой выше.
Комментарии:
1. Как я могу снова преобразовать приведенную выше строку в объект? это действительно плохая идея
2. Я знаю, что есть другие способы, такие как генерация json или сериализация в виде объекта Java, а затем преобразование его обратно. Однако сейчас это не решение для меня, поскольку мне приходится работать со строкой, упомянутой выше это правильный путь:D
3. Вы «разбираете» это сами, потому что нет универсального способа сделать это. В конечном итоге вам будет грустно из-за того, что вы хотите это сделать.
4. Если вам нужно универсальное решение — на мой взгляд, преобразуйте эти строки в JSON и используйте какую-нибудь библиотеку, например Jackson. Если только для Person, то просто проанализируйте это самостоятельно. И то, и другое — очень плохая идея.
5. Привет @Ravi Jiyani. Требование заключается в том, что я работаю с устаревшими данными, и данные хранятся таким образом для целей аудита. Но теперь нам нужно поработать с этими данными.
Ответ №1:
Вместо этого сделайте это в классе.
/**
* Object as JSON string.
* @return
*/
public String toString() {
// Initiate GSON = new GsonBuilder().create();
return GSON.toJson(this);
}
Из объекта в строку : object.toString().
Из строки в объект : GSON.FromJSON(jsonString, ModelClass);
Ответ №2:
Наконец, мне пришла в голову идея преобразовать эту строку в формат JSON, а затем преобразовать ее в объект.
Итак, строка, сгенерированная lombok, является:
Person(name=John, age=30, telephone=Telephone(codeArea=16, number=1111-2222))
А затем она преобразуется в JSON путем замены следующих символов (, = и ) на {, : и } соответственно и удаления имен классов:
{name:John, age:30, telephone:{codeArea=16, number=1111-2222}}
Теперь можно преобразовать JSON в объект.
Я создал проект в Github, который выполняет это преобразование.
Комментарии:
1. я не думаю, что замена настолько проста.
2. @Henrique: Кажется, вместо использования Memento мы можем использовать шаблон команд при работе с Lombok, а затем восстановить объект обратно в исходное состояние с помощью такого проекта.