我想用AutoBeans序列化以下类。
public class GetResults<T extends Dto> implements Result {
List<T> results;
protected GetResults() {
}
public GetResults(List<T> results) {
this.results = results;
}
public List<T> getResults() {
return results;
}
public void setResults(List<T> results) {
this.results = results;
}
}
这是我尝试但失败的原因:
public class AutoBeanSerializer {
private final AutoBeanFactory factory;
public AutoBeanSerializer(AutoBeanFactory factory) {
this.factory = factory;
}
public String <T> encodeData(T data) {
AutoBean<T> autoBean = AutoBeanUtils.getAutoBean(data);
return AutoBeanCodex.encode(autoBean);
}
public <T> T decodeData(Class<T> dataType, String json) {
AutoBean<T> bean = AutoBeanCodex.decode(factory, dataType, json);
return bean.as();
}
}
以上代码与
不符public String encodeData(T data){
有这些错误:
- T cannot be resolved to a type
- The type String is not generic; it cannot be parameterized with arguments
<T>
如何在GWT中使用抽象类型序列化上述类?
答案 0 :(得分:2)
对于第二部分(与标题中的第一部分或问题无关),我在原始答案中的代码中存在拼写错误。方法encodeData应该在返回类型之前定义通用arg T:
public <T> String encodeData(T data) {
AutoBean<T> autoBean = AutoBeanUtils.getAutoBean(data);
return AutoBeanCodex.encode(autoBean);
}
但请注意,此代码对您的第一个类没有帮助,因为AutoBeans意味着是类bean接口的自动实现,而不是常规java类。有关如何使用自动转发的详细信息,请参阅http://code.google.com/p/google-web-toolkit/wiki/AutoBean。
答案 1 :(得分:1)
您可以使用此lib:https://code.google.com/p/gwt-streamer/
如果你在所有类中实现Streamable,它将完成这项工作。
以下是文档中的示例:
public class Person implements Streamable {
// fields, visibility doesn't matter
private String name;
private int age;
private Person() {} // default no-args constructor is required
public Person( String name, int age ) {
this.name = name; this.age = age;
}
// getters, setters are optional...
}
服务器和客户端使用相同的API进行序列化。
Person person = new Person( "Anton", 33 );
String buffer = Streamer.get().toString( person );
//...
person = (Person) Streamer.get().fromString( buffer );
//...
Person personCopy = Streamer.get().deepCopy( person );