thrift:返回null的解决办法

最的项目用到swift:thrift做RPC框架,开始也没有了解太深,就开始干了,今天开始测试了,发现thrift居然不允许服务接口返回null。跟踪源码到下面的方法,找到为null时抛出异常的位置:

Object com.facebook.swift.service.ThriftMethodHandler.readResponse(TProtocol in) throws Exception

readResponse方法片段:

        if (successCodec.getType() == ThriftType.VOID) {
            // TODO: check for non-null return from a void function?
            return null;
        }

        if (results == null) {
            throw new TApplicationException(TApplicationException.MISSING_RESULT, name + " failed: unknown result");
            // result为null抛出异常,异常错误代码:TApplicationException.MISSING_RESULT
        }

知道原因就好解决了,捕获TApplicationException异常判断就可以了:

    public List<Integer> loadAllPerson(){
        try{
            return service.loadAllPerson();
        }
        // 捕获RuntimeTApplicationException异常
        catch(RuntimeTApplicationException e){
            Throwable cause = e.getCause();
            // cause 类型为 TApplicationException时再判断异常类型时是否为MISSING_RESULT,
            // 是就返回null,否则继续向上抛出
            if (cause instanceof TApplicationException  
                && ((TApplicationException) cause).getType() == TApplicationException.MISSING_RESULT){
                return null;
            }
            throw e;
        }
        catch(net.gdface.facelog.client.thrift.ServiceRuntime e){
            throw new ServiceRuntime(e);
        }
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从零开始学 Web 前端

从零开始学 Web 之 JavaScript(二)变量

基础数据类型: String,Number,Boolean,unsigned、null

633
来自专栏乐百川的学习频道

C++学习笔记 基本数据类型

由于考研的编程题很多都需要使用C++语言来写,所以虽然我不太喜欢C++这门语言,那么还是得来看看。 算术类型 需要提前说明,C++语言属于比较低级的语言,所以没...

1648
来自专栏简书专栏

Python正则表达式re库的使用

re.search函数需要传入2个参数,第1个参数是正则表达式,第2个参数是要进行搜索的源字符串。 re.search函数返回结果的数据类型是sre.SRE_...

682
来自专栏猿人谷

cctype

在头文件<ctype.h>中定义了一些测试字符的函数。在这些函数中,每个函数的参数都是整型int,而每个参数的值或者为EOF,或者为char类型的字符。<cty...

1708
来自专栏北京马哥教育

Python Re 模块最全解读: 11703 字帮你彻底掌握

re模块下的函数 compile(pattern):创建模式对象 import re pat=re.compile('A') m=pat.search('CBA...

31810
来自专栏Java进阶之路

java中常用正则表达式

1513
来自专栏Celebi的专栏

C/C++ 学习笔记一(整型/浮点型)

工作中经常使用到C/C++,为对C有个比较深刻的了解,重新拾起学习C的任务。在看书的同时,记录下思考的过程,也记录下重要的知识点。

1010
来自专栏数据处理

gbk,utf-8,unicode编码转换

1123
来自专栏CaiRui

Python正则表达式

正则表达式为高级的文本模式匹配、抽取、与/或文本形式的搜索和替换功能提供了基础。通过标准库中的re模块来支持正则表达式。 常见的正则表达式符号和特殊字符 ...

1779
来自专栏https://www.cnblogs.com/L

python 使用小结

使用Python 已经一段时间了 ,现将python 中可能用到的技巧和一些知识点分享如下。

601

扫码关注云+社区