如何将DTO序列化为键值列表?

时间:2017-05-15 15:05:56

标签: java serialization

我想将复杂的DTO序列化为键值对的平面图。

因此,每个基元应该直接转换为键值。

每个列表本身应根据列表中的索引附加数字。

示例:

public class PersonDTO {
  @XmlElement(name="THEPERSON")
  private String name;

  @XmlElement(name="THEAGE")
  private int age;

  private List<Pet> pets;
}

public class Pet {
    private String name;
    private String type;
}

期望的结果:

THEPERSON=test
THEAGE=16
PETNAME_1=pabbi
PETTYPE_1=rabbit
PETNAME_2=foxy
PETTYPE_2=fox
...
PETNAME_N=...

问题:是否有任何框架可以帮助序列化这样的dto? 我的DTO可能包含100多个字段,否则我必须手动转换。

1 个答案:

答案 0 :(得分:1)

BeanMap在org.apache.commons.beanutils中可用,它会将带有setter和getter方法的简单bean类转换为map。对于你的用例,我认为你需要通过反射编写类似的util,你可以获得价值然后你找到属性的read方法并填充值。

代码示例:

public class BeanMapExample {

    public static void main(String[] args) {

        Person person = new Person();
        person.setFirstName("gati");
        person.setLastNmae("sahu");
        person.setEmailId("abcd@gmail.com");
        person.getMyFriendList().add("sahu");

        BeanMap map = new BeanMap(person);

        //Iterate through keys
        Iterator<String> it = map.keyIterator();
        it = map.keyIterator();
        while (it.hasNext()) {
            String key = it.next();
            System.out.println(key + ": " + map.get(key));
        }
    }
}

输出:

firstName: gati
lastNmae: sahu
emailId: abcd@gmail.com
class: class pkg1.Person
myFriendList: [sahu]