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 条评论
登录 后参与评论

相关文章

来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

3502
来自专栏杨龙飞前端

scrollto 到指定位置

3435
来自专栏魂祭心

原 canvas绘制clock

5904
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

3356
来自专栏技术记录

java小技术之生成二维码

把我们需要的链接或者内容生成二维码其实是一件非常容易的事情,有很多办法可以实现,这里我们采用JS方法生成。 <!DOCTYPE HTML PUBLIC "-//...

1956
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2997
来自专栏芋道源码1024

熔断器 Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker

本文主要基于 Hystrix 1.5.X 版本 1. 概述 2. HystrixCircuitBreaker 3. HystrixCircuitBreaker....

6367
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.6K7
来自专栏ASP.NETCore

ASP.NET Core 整合Autofac和Castle实现自动AOP拦截

除了ASP.NETCore自带的IOC容器外,我们还可以使用其他成熟的DI框架,如Autofac,StructureMap等(笔者只用过Unity,Ninjec...

844
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4895

扫码关注云+社区