gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:43:06 24 4
gpt4 key购买 nike

我正在使用 apache thrift 开发一项服务。我有一个名为 getUser 的服务,它返回 User 对象。我找不到任何方法将用户定义的数据类型定义为我在 .thrift 文件中定义的服务的返回类型。

user.thrift 文件如下所示:

service UserService
{
User getUser(1:i32 userId),
}

当我编译 user.thrift 以生成 java 源代码时,出现“Type “User” has not been defined”错误。任何人都可以帮助我,如何将这个用户定义的 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;
}

这是我的用户类,其对象由服务 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-only,因为该字段必须是可读/可写的。但您不必转换任何数据。

第二种方法保留了您现在拥有的 getter/setter 结构,并进行了一些小的修改(工厂模式可能值得一看)。你为此付出了从 Thrift 到你的类并返回的额外数据转换的负担。

这取决于具体要求,哪个选项更适合您的情况。

关于java - 如何在 .thrift 文件中将 java 对象表示为服务的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30897648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com