如何在.thrift文件中将java对象表示为返回服务类型

时间:2015-06-17 16:47:07

标签: java thrift

我正在使用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;
    }

}

1 个答案:

答案 0 :(得分:3)

相关的IDL可能如下所示:

animate()

所以这很简单。有了这个,你有两个选择:

  • 使用Thrift生成的类作为数据对象,替换现有的类
  • 编写一些来回转换数据的代码。

这两种选择各有利弊。使用第一种方法,您将丢失Id的getter-only,因为该字段必须是可读/可写的。但是您不必转换任何数据。

第二种方法让你现在拥有getter / setter结构,只需稍作修改(工厂模式值得一看)。您需要支付从Thrift到您的班级并返回的额外数据转换的负担。

这取决于具体要求,哪种选择对您的情况更好。