以下代码是GWT RPC serlvet实现,
转换后的集合显然在客户端中失败了,因为它与GWT不兼容。
我缺少Guava内的任何提示?
@Singleton
public class DataServiceImpl extends RemoteServiceServlet implements
DataService {
@Inject
ApplicationDao dao;
@Inject
DtoUtil dtoUtil;
public Collection<GoalDto> getAllConfiguredGoals() {
return Collections2.transform(dao.getAllGoals(), new Function<Goal, GoalDto>() {
public GoalDto apply(@Nullable Goal goal) {
return dtoUtil.toGoalDto(goal);
}
});
}
}
我正在寻找一种本地番石榴解决方案,而不是一些手写的翻译代码。
最佳答案
在这种情况下,番石榴的问题在于它使用了惰性评估(通常很好,但在这里不是这样),并且该集合由原始集合备份。唯一的解决方法是强制执行一个新集合,该集合不具有原始对象的备份,并且已执行所有评估。这样的事情应该可以解决问题(假设GoalDto是可以GWT序列化的):
return new ArrayList<GoalDto>(Collections2.transform(dao.getAllGoals(), new Function<Goal, GoalDto>() {
public GoalDto apply(@Nullable Goal goal) {
return dtoUtil.toGoalDto(goal);
}
}));