我正在使用apache节俭开发服务.我有一个名为getUser的服务,该服务返回User对象.我找不到任何方法来将用户定义的数据类型定义为.thrift文件中定义的服务的返回类型.
user.thrift文件如下所示:
service UserService
{
User getUser(1:i32 userId),
}
当我编译user.thrift以生成Java源代码时,出现“未定义“用户”类型”错误.谁能帮助我,如何将这个用户定义的java对象表示为节俭的数据类型.
服务实现类中的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;
}
}
解决方法:
相关的IDL可能如下所示:
struct User {
1 : i32 userId
2 : string name
3 : string city
4 : string country
}
这很简单.这样,您有两个选择:
>使用Thrift生成的类作为数据对象,替换现有的类
>编写一些代码来回转换数据.
两种选择都有其优点和缺点.使用第一种方法时,您将丢失ID的仅吸气剂,因为该字段必须是可读写的.但是您不必转换任何数据.
第二种方法是使您保留当前拥有的getter / setter结构,并进行一些小的修改(可能值得一看工厂模式).您为此付出了额外的负担,要从Thrift到班级再转换回来.
这取决于确切的要求,哪种选择更适合您的情况.