Thrift(二):Thrift注解

目录

1、Thrift注解开发介绍

2、注解Demo

1、服务接口

2、各个类

3、枚举

3、注解和IDL规范

4、编码规范


​​​​​​​

1、Thrift注解开发介绍

Java服务开发流程上,取消IDL。

注解方式和IDL方式一样,不支持泛型。

使用注解开发方式时,应避免IDL和注解混用。

2、注解Demo

1、服务接口

@ThriftService
public interface TestService {

    @ThriftMethod
    public TestResponse method1(TestRequest testRequest) throws TException;

    @ThriftMethod
    public Long method2(int i) throws TException;

    @ThriftMethod(exception = {@ThriftException(type = TestException.class, id=1)})
    public String method3() throws TestException, TException;

}

2、各个类

@ThriftStruct
public class TestRequest {

    private Integer userId;
    private String message;
    private Integer seqId;

    @ThriftConstructor
    public TestRequest(Integer userId, String message, Integer seqId) {
        this.userId = userId;
        this.message = message;
        this.seqId = seqId;
    }

    @ThriftField(value = 1,requiredness = ThriftField.Requiredness.REQUIRED)
    public Integer getUserId() {
        return userId;
    }

    @ThriftField
    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    @ThriftField(2)
    public String getMessage() {
        return message;
    }

    @ThriftField
    public void setMessage(String message) {
        this.message = message;
    }

    @ThriftField(value = 3,requiredness = ThriftField.Requiredness.OPTIONAL)
    public Integer getSeqId() {
        return seqId;
    }

    @ThriftField
    public void setSeqId(Integer seqId) {
        this.seqId = seqId;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        TestRequest that = (TestRequest) o;
        return Objects.equals(userId, that.userId) &&
                Objects.equals(message, that.message) &&
                Objects.equals(seqId, that.seqId);
    }

    @Override
    public int hashCode() {
        return Objects.hash(userId, message, seqId);
    }

    @Override
    public String toString() {
        return "TestResponse{" +
                "userId=" + userId +
                ", message='" + message + '\'' +
                ", seqId=" + seqId +
                '}';
    }
}
@ThriftStruct
public class TestResponse {

    private Integer userId;
    private String message;
    private Integer seqId;

    @ThriftConstructor
    public TestResponse(Integer userId, String message, Integer seqId) {
        this.userId = userId;
        this.message = message;
        this.seqId = seqId;
    }

    @ThriftField(value = 1,requiredness = ThriftField.Requiredness.REQUIRED)
    public Integer getUserId() {
        return userId;
    }

    @ThriftField
    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    @ThriftField(2)
    public String getMessage() {
        return message;
    }

    @ThriftField
    public void setMessage(String message) {
        this.message = message;
    }

    @ThriftField(value = 3,requiredness = ThriftField.Requiredness.OPTIONAL)
    public Integer getSeqId() {
        return seqId;
    }

    @ThriftField
    public void setSeqId(Integer seqId) {
        this.seqId = seqId;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        TestResponse that = (TestResponse) o;
        return Objects.equals(userId, that.userId) &&
                Objects.equals(message, that.message) &&
                Objects.equals(seqId, that.seqId);
    }

    @Override
    public int hashCode() {
        return Objects.hash(userId, message, seqId);
    }

    @Override
    public String toString() {
        return "TestResponse{" +
                "userId=" + userId +
                ", message='" + message + '\'' +
                ", seqId=" + seqId +
                '}';
    }
}
@ThriftStruct
public class TestException extends AbstractThriftException {

    private String message;

    @ThriftConstructor
    public TestException(String message) {
        this.message = message;
    }

    @Override
    @ThriftField(1)
    public String getMessage() {
        return message;
    }

    @ThriftField
    public void setMessage(String message) {
        this.message = message;
    }
}

3、枚举

@ThriftEnum
public enum ThriftAnnotatedEnum {

    FIRST_VALUE("first",0),
    SECOND_VALUE("second",1);

    private String description;
    //直接在枚举类定义整数类型的成员变量用于标识,int类型这里不能为负数
    private int intValue;



    ThriftAnnotatedEnum(String description,int intValue) {
        this.description = description;
        this.intValue = intValue;
    }

    @ThriftEnumValue
    public int getIntValue() {
        return intValue;
    }
}

3、注解和IDL规范

service       --     @ThriftService

struct          --     @ThriftStruct

struct属性   --     @ThriftField

enum          --      @ThriftEnumValue

4、编码规范

在swift中service一般以接口的形式存在

  • 整个类用@ThriftService注解
  • 方法用@ThriftMethod注解
  • 异常用@ThriftMethod(exception = {@ThriftException(type = InvalidException.class, id = 1)})
  • @ThriftStruct注解类、枚举、异常
  • 成员变量的get方法用@ThriftField(1)注解,括号里面的表示字段的ID,这个在thrift文件里有体现。set方法不需要ID
  • 构造器用@ThriftConstructor注解
  • 枚举用@ThriftEnum注解

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
thrift-generator 是通过 Java 的接口生成 thrift 文件的工具。例子:public interface ICommonUserService {     public User login(int id, String name);     public User getUserById(long id);     public boolean saveUser(User user);     public List getUserIds(long id);      public Map getUserByIds(List ids);     public Map<String, List> getUsersByName(List names);     public Map<Long, List> getGroupUsers(List names, List userList, List lns, long ll);     public List testCase1(Map num1, List num2, List num3, long num4, String num5); } public class ThriftStructBuilderTest {     private ThriftFileBuilder fileBuilder = new ThriftFileBuilder();     @Test     public void toOutputstream() throws Exception {         this.fileBuilder.buildToOutputStream(ICommonUserService.class, System.out);     } }执行代码:mvn test -Dtest=com.sohu.thrift.generator.builder.ThriftStructBuilderTest之后控制台输出如下:namespace java com.sohu.thrift.generator.test.thrift     enum Status {             NORMAL = 0,             BLOCKED = 1     }     struct Account {             1:i32 id,             2:string name     }     struct User {             1:i32 id,             2:string name,             3:bool sex,             4:Status status,             5:list ids,             6:Account account     }     service ICommonUserService {             User login(1:i32 arg0,2:string arg1),             map<string, list> getUsersByName(1:list arg0),             bool saveUser(1:User arg0),             map getUserByIds(1:list arg0),             list getUserIds(1:i64 arg0),             map<i64, list> getGroupUsers(1:list arg0,2:list arg1,3:list arg2,4:i64 arg3),             User getUserById(1:i64 arg0),             list testCase1(1:map arg0,2:list arg1,3:list arg2,4:i64 arg3,5:string arg4)     }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值