我正在使用apache thrift开发服务。我有一个名为getUser的服务,它返回User对象。我无法找到任何方法将用户定义的数据类型定义为.thrift文件中定义的服务的返回类型。
user.thrift文件如下所示:
service UserService
{
User getUser(1:i32 userId),
}
当我编译user.thrift以生成java源代码时,我得到" 键入" User"尚未定义"错误。任何人都可以帮助我,如何将这个用户定义的java对象表示为thrift中的数据类型。
服务实现类中的getUser方法代码:
@Override
public User getUser(int user id) throws TException {
// here is the code that fetch the user object from database
return user;
}
这是我的User类,其对象由服务getUser返回:
public class User {
private int userId;
private String name;
private String city;
private String country;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
答案 0 :(得分:3)
相关的IDL可能如下所示:
animate()
所以这很简单。有了这个,你有两个选择:
这两种选择各有利弊。使用第一种方法,您将丢失Id的getter-only,因为该字段必须是可读/可写的。但是您不必转换任何数据。
第二种方法让你现在拥有getter / setter结构,只需稍作修改(工厂模式值得一看)。您需要支付从Thrift到您的班级并返回的额外数据转换的负担。
这取决于具体要求,哪种选择对您的情况更好。