使用BeanUtils序列化为键/值对

时间:2012-01-25 11:26:43

标签: java serialization introspection apache-commons-beanutils

我想编写一个Java程序,它接受任意数据并将其存储在MySQL数据库中。稍后可以再次读取数据并重建原始对象结构。

背景是我需要一个通用工具,用于需要电子邮件验证才能完成的表单。所以:

  1. 用户填写表格,
  2. 如上所述存储数据,
  3. 使用包含标识数据集的特定UUID的链接向用户发送电子邮件
  4. 用户点击链接
  5. servlet使用链接中的UUID加载存储的数据并处理数据。
  6. 我希望这适用于任何数据,不仅仅是String / String或String / int对。 我正在考虑使用org.apache.common.beanutils中的LazyDynaBean作为将数据传递给我的工具的方法。

    问题是:是否有一种很好的方法来序列化这些东西,即使值是bean(让我们限制Java Bean),而不仅仅是原语?

    我在想我的数据库表看起来像这样

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

    这可行吗? 有人能指出我如何在这个结构中存储和加载DynaBean的正确方向吗?或者我错过的任何替代方案?

    非常感谢。

1 个答案:

答案 0 :(得分:0)

您可以将您的Bean序列化/反序列化为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;
}