Сериализация в пары ключ / значение с помощью BeanUtils - PullRequest
0 голосов
/ 25 января 2012

Я хотел бы написать программу на Java, которая принимает произвольные данные и сохраняет их в базе данных MySQL.Позже данные могут быть снова прочитаны, а исходная структура объекта восстановлена.

На заднем плане я хочу универсальный инструмент для форм, для завершения которых требуется проверка электронной почты.Итак:

  1. Пользователь заполняет форму,
  2. Данные сохраняются, как указано выше,
  3. Электронное письмо отправляется пользователю со ссылкой, содержащей определенный UUID, идентифицирующийнабор данных,
  4. Пользователь щелкает ссылку,
  5. Сервлет загружает сохраненные данные, используя UUID в ссылке, и обрабатывает данные.

Я бы хотелэто работает для любых данных, а не только для пар String / String или String / int.Я думал об использовании LazyDynaBean из org.apache.common.beanutils в качестве средства передачи данных в мой инструмент.

Вопрос: есть ли хороший способ сериализации этого материала, даже когда значенияbean-компоненты (давайте ограничимся Java Beans), а не только примитивы?

Я думал, что мои таблицы базы данных могут выглядеть следующим образом

emailVerification
| ID | UUID | validUntil |

emailVerificationData
| ID | emailVerification.ID | name | index | key | value | className |

Это вообще возможно?Может кто-нибудь указать мне правильное направление, как хранить и загружать DynaBean в эту структуру?Или какие-то альтернативы, которые я пропустил?

Спасибо большое.

1 Ответ

0 голосов
/ 25 января 2012

Вы можете сериализовать / десериализовать ваши Beans в и из XML (см. Пример ниже) и сохранить String в базе данных.

Помогает ли это?

    public static String beanToXMLString(final Object bean) {
    String returnvalue = null;
    final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    final XMLEncoder xmlEncoder = new XMLEncoder(new BufferedOutputStream(byteArrayOutputStream));
    xmlEncoder.writeObject(bean);
    xmlEncoder.close();
    returnvalue = byteArrayOutputStream.toString();
    return returnvalue;
}

public static Object beanFromXMLString(final String xml) {
    Object returnvalue = null;
    final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(xml.getBytes());
    final XMLDecoder xmlDecoder = new XMLDecoder(new BufferedInputStream(byteArrayInputStream));
    returnvalue = xmlDecoder.readObject();
    xmlDecoder.close();
    return returnvalue;
}
...