Skip to content

refactor(contrib/rpc/grpcx): optimize server unary interceptor error … - #4785

Open
BandlSkyler wants to merge 1 commit into
gogf:masterfrom
BandlSkyler:feat-grpc-option-unary-err
Open

BandlSkyler wants to merge 1 commit into
gogf:masterfrom
BandlSkyler:feat-grpc-option-unary-err

Conversation

@BandlSkyler

Copy link
Copy Markdown

PR 描述

修复:在 UnaryError 拦截器中保留错误详情信息

问题描述

当前 UnaryError 拦截器在将自定义错误转换为 gRPC 标准错误时,会丢失扩展错误信息(protobuf 的 Details 字段)。

// ❌ 当前实现 - Details 信息丢失
err = status.Error(codes.Code(code.Code()), err.Error())

当错误中包含 Details 扩展信息时(如字段校验失败详情、业务规则违反信息、本地化错误消息等),这些信息会被完全丢弃,导致客户端无法接收到 google.rpc.Status 中定义的丰富错误详情。

@BandlSkyler
BandlSkyler force-pushed the feat-grpc-option-unary-err branch from af5de0a to 41c782b Compare June 18, 2026 01:53
@gqcn

gqcn commented Sep 14, 2026

Copy link
Copy Markdown
Member

保留已实现 GRPCStatus() 的错误、避免冲掉 Details,这个方向是对的。合并前建议补上测试:

  • 建议优先处理 contrib/rpc/grpcx/grpcx_interceptor_server.go:行为已经变了(已是 gRPC status 的错误不再被 status.Error 重包),但这次没有对应测试。可以考虑加一个 unary interceptor 用例,覆盖「已有 Details 的 status 错误应原样返回」。

我暂时没有添加 bot-approved 标签。

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants