我开发了几个GWT Web应用程序。最新的一个是对另一个的一点修改。除了最新版本之外,它们都运行良好。例外是:
The response could not be deserialized
我在Hibernate和GWT之间使用Hibernate和数据传输对象。每个DTO都实现了java.io.Serializable接口。正如我之前所说,在其他应用程序中运行良好。有人可以帮我解决这个错误吗?我不知道原因是什么。
我的Hibernate对象代码是:
public List<AttributeDTO> getAttributes(){
String sql = "from Attribute where (select max(tDate) from Attribute)-tDate < '0 days 00:05'";
List<Attribute> attributes = new ArrayList<Attribute>(DatabaseManager.createQuery(sql));
List<AttributeDTO> attributeDTOs = new ArrayList<AttributeDTO>(attributes != null ? attributes.size() : 0);
if (attributes != null) {
for (Attribute attribute : attributes) {
String date = format.format(attribute.gettDate());
attributeDTOs.add(new AttributeDTO(attribute.getiAttrId(),attribute.getsName(),attribute.getsValue(),date,attribute.getiDeviceId(),attribute.getsUnits(),new ApplicationFieldDTO()));
}
}
return attributeDTOs;
}
而且AttributeDTO是:
public class AttributeDTO implements Serializable {
private static final long serialVersionUID = 1L;
private int iAttrId;
private String name;
private String value;
private String date;
private String units;
private int iDeviceId;
private ApplicationFieldDTO appField;
public AttributeDTO() {}
public AttributeDTO(int attrId, String name, String value, String date, int deviceId, String units, ApplicationFieldDTO appField) {
this.iAttrId = attrId;
this.name = name;
this.value = value;
this.date = date;
this.iDeviceId = deviceId;
this.units = units;
this.appField = appField;
}
}
从GWT调用getAttributes()方法,该方法返回AttributeDTO列表。
感谢!!!
答案 0 :(得分:1)
如果只有一个类的成员不可序列化,也会出现错误 - 因此错误也可能出现在ApplicationFieldDTO的定义中。
顺便说一下,您也可以使用Gilead而不是使用数据传输对象,甚至延迟加载也可以。 (但对于您现有的应用程序,引入Gilead可能需要做很多工作。)
答案 1 :(得分:0)
使用ArrayList
代替List,然后重试
看看这个post。
答案 2 :(得分:0)
我遇到了同样的麻烦。尝试使用com.google.gwt.user.client.rpc.IsSerializable而不是Serializable。它对我有用,我希望对你有所帮助:)。
答案 3 :(得分:0)
我也面临类似的问题。在我从UI提交值的情况下,例外
显示“ GWT错误:无法反序列化响应”
。我发现,整个代码库没有正确打包以转换为.war文件。我正在使用Ant Build方法创建 .war 文件。
后来,我在eclipse中安装了一个插件,对我来说效果很好。我使用此link
从eclipse市场安装了插件