GWT AutoBean - 没有序列化ArrayList <string>,其他pojos好吗?

时间:2016-02-22 17:10:15

标签: gwt javabeans

我无法使用AutoBean机制获取ArrayList进行序列化。我使用的是GWT 2.7。这是我的设置:

public interface IUser {
    String getName();
    void setName(String name);

    ArrayList<String> getFriends();
    void setFriends(ArrayList<String> friends);
}

public class User implements IUser {
    private String name;
    private ArrayList<String> friends;

    ... getters and setters for all members attributes ...
}

然后我的豆厂:

public interface AutoBeanFactoryImpl extends AutoBeanFactory {
    AutoBean<IUser> user(IUser inst);
}

最后我的用法:

ArrayList<String> friends = new ArrayList<String>();
friends.add("Mary");

User user = new User();
user.setName("Fritz");
user.setFriends(friends);

AutoBeanFactoryImpl factory = GWT.create(AutoBeanFactoryImpl.class);
AutoBean<IUser> bean = factory.user(user);
String json = AutoBeanCodex.encode(bean).getPayload();

输出json没有friends数组。它的名字还可以。为什么字符串数组没有被序列化?我需要一些特别的东西吗?

由于

1 个答案:

答案 0 :(得分:1)

问题在于您指定了ArrayList而不仅仅是普通List - 为了很好地生成填补Java和JSON之间空白的代码,autobeans只想使用接口。除了getter和setter之外,AutoBeans还特别支持ListSet(在JSON中只有List没有重复项)和Map。如果指定特定实现,则AutoBean工具无法始终处理它。

随意传入ArrayList个实例,但声明你的getter和setter属于List类型。

除此之外,这些集合可以是AutoBeans可以处理的任何类型 - 包括数字,布尔值,字符串,日期以及任何其他类似bean的接口,这些接口也符合AutoBeans可以处理的内容。