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

我正在使用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到班级再转换回来.

这取决于确切的要求,哪种选择更适合您的情况.

上一篇:带有Javascript客户端的节俭Java服务器OutOfMemoryError


下一篇:python-Cassandra / Pycassa:get_slice()/ get_indexed_slice()失败,并出现TApplicationException:未知结果