Как преобразовать в объект строку, сгенерированную аннотацией @toString lombok?

#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, а затем восстановить объект обратно в исходное состояние с помощью такого проекта.