You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Retrofit+RxJava映射结果为Result密封类时报私有无参构造调用错误

报错原因

Retrofit 接口的返回类型直接定义为 Single<Result<TestResult>>,默认的序列化转换器(如 Gson)会尝试将服务端返回的 JSON 直接反序列化为 Result 类实例。但 Result 是密封类,本身为抽象类型、构造函数私有且没有无参构造方法,序列化工具无法完成实例化,因此抛出该错误。

解决方案

最简单的修复方式是拆分「服务端返回反序列化」和「Result 密封类包装」两个逻辑,不要让序列化工具直接操作密封类:

  1. 修改 Retrofit 接口定义,返回值直接声明为业务实体类型:
@POST("$/Test")
fun UpdateProfile(@Body testBody: TestBody): Single<TestResult>
  1. 调整调用逻辑,自行用 RxJava 操作符完成 Result 封装,删除冗余的类型判断逻辑:
webServices.UpdateProfile(testBody)
    .map<Result<TestResult>> { 
        Result.Success(it)
    }
    .onErrorReturn { 
        Result.Failure(it)
    }
    .subscribe()

如果需要统一做 Result 封装,也可以自定义 Retrofit CallAdapter,在请求完成后自动包装为 Result 类型,避免每个接口都手动写转换逻辑。

内容的提问来源于stack exchange,提问作者Omar Hassan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:36:03