Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
評価
調査の方向性
ApprovalService$ExternalInstance.create から /open-apis/approval/v4/external_instances に対して呼び出される UnmarshalRespUtil.unmarshalResp から始めます。Gson が JsonSyntaxException を発生させたときに HTTP レスポンスボディがどのように処理されるかを追跡し、そのうえで、失敗時にデシリアライズエラーだけを公開するのではなく、返されたレスポンス内容が保持またはログ出力されることを確認します。
索引モデルが issue の本文から書いたものです。
説明
背景
需要将自研系统中的审批流数据同步到飞书审批中心。
资料
使用的SDK:com.larksuite.oapi:oapi-sdk:2.0.20
报错
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
at com.google.gson.Gson.fromJson(Gson.java:922)
at com.google.gson.Gson.fromJson(Gson.java:887)
at com.google.gson.Gson.fromJson(Gson.java:836)
at com.google.gson.Gson.fromJson(Gson.java:808)
at com.lark.oapi.core.utils.UnmarshalRespUtil.unmarshalResp(UnmarshalRespUtil.java:22)
at com.lark.oapi.service.approval.v4.ApprovalService$ExternalInstance.create(ApprovalService.java:587)
期望
先看代码
// 反序列化
CreateExternalInstanceResp resp = UnmarshalRespUtil.unmarshalResp(httpResponse, CreateExternalInstanceResp.class);
if (resp == null) {
log.error(String.format(
"%s,callError,req=%s,respHeader=%s,respStatusCode=%s,respBody=%s,", "/open-apis/approval/v4/external_instances"
, Jsons.DEFAULT.toJson(req), Jsons.DEFAULT.toJson(httpResponse.getHeaders()),
httpResponse.getStatusCode(), new String(httpResponse.getBody(),
StandardCharsets.UTF_8)));
throw new IllegalArgumentException("The result returned by the server is illegal");
}
UnmarshalRespUtil.unmarshalResp方法在执行时并没有做异常处理,导致CreateExternalInstanceResp resp = UnmarshalRespUtil.unmarshalResp(httpResponse, CreateExternalInstanceResp.class);执行时,直接抛出异常,不会继续向下执行,并打印出返回结果日志。
希望完善这个BUG,抛出异常可以,但应该要输出返回结果是什么,而不是JSON序列化的错误。
- 主要言語
- Java
- スター
- 311
- フォーク
- 115
- 平均マージ
- 19分
- マージ済み PR(30日)
- 2
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
larksuite/oapi-sdk-java のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
larksuite/oapi-sdk-java#197 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
larksuite/oapi-sdk-java#196 ·
-
sdk提供的新增、更新人才接口代码和飞书招聘的接口不一致,导致接口调用失败,返回报错是类型转换失败対応中かも @CharLilis が 80 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
larksuite/oapi-sdk-java#191 ·
-
難易度 1/5 1時間未満 初心者へのやさしさ 82/100
larksuite/oapi-sdk-java#149 ·
-
接口响应类型错误オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
larksuite/oapi-sdk-java#79 ·
larksuite/oapi-sdk-java の issue をすべて見る
似ている issue
-
RRateLimiter acquire methods accept negative permits and raise available permits above the rate.オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 4 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 75/100
krahets/hello-algo#1993 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
NationalSecurityAgency/ghidra#9884 ·
メンテナーはふだん 2 日以内に返信
-
Status: Pending Review Type: Feature Request
難易度 1/5 1時間未満 初心者へのやさしさ 82/100
OpenRefine/OpenRefine#8019 ·
メンテナーはふだん 1 日以内に返信
-
[TEMP] pin maven version to 3.9.x対応中かも @petrenyi-mark が今日担当しました。 オープン
難易度 2/5 1時間未満 初心者へのやさしさ 62/100