日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

thrift如何定义Java中的object类型

發布時間:2023/12/29 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 thrift如何定义Java中的object类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • thrift如何定義Java中的Object類型
    • 方法一:使用聯合(union)
    • 方法二:使用特殊類型(binary)
    • 終極方法:序列化

thrift如何定義Java中的Object類型

由于thrift的類型沒有類似java的Object類型,當我們想用thrift來定義一個具體類型不確定的對象時候,會有不知如何定義的困擾。

方法一:使用聯合(union)

union的特點是結構中的每個field之間的關系是互斥的,即只能有一個field被使用被賦值。所以可以根據我們未知類型對象的類型范圍定義一個union

union JavaObjectArg {1: i32 int_arg;2: i64 long_arg;3: string string_arg;4: bool bool_arg;5: binary binary_arg;6: double double_arg; }struct OneResp {1: list<JavaObjectArg> myList, }

union的使用方式
可以通過生成的JavaObjectArg.java中的standardSchemeReadValue方法獲取,對應的類型

protected Object standardSchemeReadValue(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TField field) throws org.apache.thrift.TException

或者,通過對應類型的get方法獲得結果。例如獲取int類型的結果

public int getInt_arg() {if (getSetField() == _Fields.INT_ARG) {return (Integer)getFieldValue();} else {throw new RuntimeException("Cannot get field 'int_arg' because union is currently set to " + getFieldDesc(getSetField()).name);}}

方法二:使用特殊類型(binary)

binary:是未編碼的字節序列
類似,當我們想定義一個List時

struct TwoResp {1: list<binary> myList, }

生成后,會變成ByteBuffer類型,根據需要的類型對應進行轉換即可。

public List<ByteBuffer> myList;

終極方法:序列化

終極方案當然還是先把包含Object類型的對象或者集合,先序列化成一個jsonString。此時,在thrift中定義成string即可。使用時,由調用端將這個string對象根據約定的對象反序列化后既可獲得需要的類型。
以下面的接口為例,通過Jackson序列化。

service ITMuouThriftService {string testScene(string param); }

服務端序列化:

Map<String, Object> decisionMap = Maps.newHashMapWithExpectedSize(1); decisionMap.put("res": 1); return new ObjectMapper().writeValueAsString(decisionMap)

調用端反序列化:

TypeReference<Map<String, Object>> MAP_TYPE_REF = new TypeReference<Map<String, Object>>() { }; String res = muouThriftService.testScene("test"); Map<String, Object> resultMap = new ObjectMapper().readValue(res, MAP_TYPE_REF);

git地址:

總結

以上是生活随笔為你收集整理的thrift如何定义Java中的object类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。