我正在研究一个GWT项目并且有点困惑。它是一个服务器/客户端项目。我正在使用Autobean处理json。 Autobean需要使用接口才能工作。我之前没有使用过这么多的工作,需要一些帮助。这就是Autobean代码:
interface User {
int id();
void setId(int id);
String getUsername();
void setUsername(String username);
}
interface Result{
List<User> getUsers();
void setUsers(List<User> users);
}
interface Beanery extends AutoBeanFactory{
AutoBean<User> makeBean();
AutoBean<Result> makeBeans();
}
要将json转换为List,我会这样做。
AutoBean<Result> autoBeanCloneAB = AutoBeanCodex.decode(beanFactory, Result.class, "{\"users\": " + json + "}" );
List<User> users = autoBeanCloneAB.as().getUsers();
我也有一个User类,我不确定这是不必要的,或者我应该如何处理它。
public class User {
private int id;
private String username;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
我在之前的所有项目中都只使用模型类而不是接口。我试图阅读并且似乎理解了接口的概念,但是在这种情况下,当我有用户界面时,我看不出有任何理由使用User类。 什么是正确的方法? 是否有使用User类的目的,如果是,请解释。
像往常一样。感谢所有帮助答案 0 :(得分:1)
如果您使用的是作为Autobean基础的代理,则需要该接口。它的工作原理与java proxy模式非常相似。该接口实际上是具体实现的代理,而无需编译具体实现。在GWT的先前版本中,使用了rpc机制,这会产生问题,因为服务器端类必须是100%GWT兼容的,并且可序列化以进行编译。 RequestFactory的AutoBean和GWT实现通过在编译期间从您的接口创建“DTO”来解决这个问题。这允许您在具体实现上调用getter / setter方法,而无需具有gwt编译的具体实现。您可以通过json简单地从服务器端到客户端进行状态转移,并在客户端代理(生成的接口实现)上调用getter / setter方法。接口看起来像开销,但是为了抽象出服务器端类中的代码是必需的。
我建议查看gwt requestfactory,因为它隐藏/处理了很多Autobean样板文件。您可以使用RequestFactory创建Bean,并使用ProxyUtils类将其转换为json(如果我没记错的话)。然后,您只需创建一个接口并使用@ProxyFor(concreteImplementation.class)对其进行注释。编译器将为您生成所有必需的代码,您不必乱用创建AutoBeanFactory接口等。
希望这有帮助。
P.S。
另一种选择是使用jsni原生界面,但这有一些微妙的细微差别。