128 Star 1K Fork 344

GVPcanonical-entropy/nop-entropy

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
.github/workflows
.knosys
.mvn/wrapper
.workflow
build-tools
config
demo
deploy
docs-en
docs
.meta
arch
compare
demo
dev-guide
ai
auth
batch
biz
boot
cluster
command
debug
delta
graalvm
graphql
ide
integration
ioc
job
message
microservice
model
nocode
orm
plugin
recipe
record
report
rule
security
sonar
spring
stream
vfs
workflow
xlang
xui
autotest.md
cli.md
codegen.md
config.md
customization.md
debug.md
delta-loader.md
dict.md
error-code.md
i18n.md
index.md
integration.md
intro.md
ioc.md
model-dump.png
optimize.md
quarkus.md
spring.md
tenant.md
faq
frontend
gpt
intro
performance
ppt
ref
theory
tutorial
user-guide
build-pdf.sh
core-code-guidance.md
index.md
nop-intro.md
why-nop.md
nop-ai
nop-all-for-spring
nop-antlr4
nop-api-core
nop-api-debugger
nop-auth
nop-autotest
nop-batch
nop-benchmark
nop-biz-report
nop-biz
nop-bom
nop-boot
nop-cdc
nop-cli-core
nop-cli-jdk11
nop-cli
nop-cluster
nop-codec
nop-codegen
nop-commons-java21
nop-commons
nop-config
nop-core
nop-css
nop-dao
nop-dataset
nop-datav
nop-dbtool
nop-demo
nop-dependencies
nop-dev
nop-dyn
nop-excel
nop-file
nop-fsm
nop-gateway
nop-git
nop-graphql
nop-hazelcast
nop-http
nop-idea-plugin
nop-integration
nop-ioc
nop-java-parser
nop-javac
nop-job
nop-js
nop-log
nop-markdown
nop-match
nop-maven
nop-message
nop-netty-ext
nop-netty
nop-nosql
nop-oauth
nop-ofbiz-migration
nop-ooxml
nop-orm-data
nop-orm-drivers
nop-orm-eql
nop-orm-geo
nop-orm-graphql
nop-orm-model
nop-orm-pdm
nop-orm
nop-pdf
nop-plugin
nop-quarkus
nop-record
nop-report-for-spring
nop-report
nop-router
nop-rpa
nop-rpc
nop-rule
nop-search
nop-security
nop-shell
nop-socket
nop-spring
nop-stream
nop-svg
nop-sys
nop-tablesaw
nop-task
nop-tcc
nop-tool
nop-ui
nop-vertx
nop-web-amis-editor
nop-web-page
nop-web-site
nop-web
nop-wf
nop-xdefs
nop-xlang-debugger
nop-xlang
scripts
tests
tools/playwright
.dockerignore
.editorconfig
.gitattributes
.gitignore
CHANGELOG.md
LICENSE
README.en.md
README.md
TODO.md
build.sh
mvnw
mvnw.cmd
nop-logo.png
nop-logo.svg
package.json
pom.xml
wechat-group.png
wechat-public-account.jpg
xlang-logo.png
xlang-logo.svg
克隆/下载
error-code.md 3.01 KB
一键复制 编辑 原始数据 按行查看 历史

统一响应格式

Nop平台的REST服务和RPC服务,统一使用ApiResponse<T>形式返回结果数据,同步模式直接返回ApiResponse,异步模式返回CompletionStage<ApiResponse<T>>

ApiResponse的基本结构如下:

class ApiResponse<T>{
    Map<String,Object> headers;
    int status;
    String code;
    String msg;
    T data;
}
  • 正常返回时status==0,通过data属性返回结果数据。
  • 失败时status不为0,通过code返回错误码,通过msg返回错误的详细消息。

status相当于是提供一个粗粒度的正确或者失败的信息表示,而且它采用整数类型,便于和命令行程序的exitCode对应。Nop平台的服务实现不仅仅是作为Http服务来使用, 它还可以直接发布为命令行服务,此时命令行程序的exitCode就使用这里的status来返回。

code为错误码,它采用字符串格式,便于扩展到各种使用场景。在Nop平台中可以通过错误码映射将系统内置的错误码映射为满足外部规范要求的错误码。

错误码定义

  1. 在常量类中定义ErrorCode,例如NopAuthErrors.java中
    ErrorCode ERR_AUTH_UNKNOWN_SITE = define("nop.err.auth.unknown-site", "未知的站点:{siteId}", ARG_SITE_ID);

它包含一个异常码的key,一个缺省的异常消息。

  1. 系统内统一使用NopException这个异常类
        if (siteMap == null)
            throw new NopException(ERR_AUTH_UNKNOWN_SITE).param(ARG_SITE_ID, siteId);

可以通过param函数为异常对象增加任意参数。 NopException具有errorCode, description, params等属性,并具有可选的status属性。

  1. 系统全局捕获所有异常,并将其转换为ApiResponse对象
ApiResponse<?> res = ErrorMessageManager.instance().buildErrorResponse(request, error);

ApiResponse的结构类似SmartAdmin中ResponseDTO。response = headers + status + msg + data

在转换为ApiResponse的过程中会执行i18n消息映射,根据异常码的key映射得到国际化消息。

  1. 异常码映射 ErrorMessageManager构造ApiResponse的过程中,会将内部异常码映射为外部异常码。比如客户对返回的异常码可能有统一规范要求。例如将 nop.err.auth.unknown-site 映射为 10010等。

  2. 参数化消息映射 有的时候系统底层可能会抛出一个统一的异常码,但是它的参数不同。如果我们希望根据不同的参数向客户返回不同的错误消息,则可以配置参数化消息映射。例如

"nop.err.my-error?myParam=xx" : "异常消息A"
  1. 异常消息定制 异常码对应的异常消息可以通过i18n文件进行定制。例如在 /i18n/zh-CN/error.i18n.yaml文件中为每个错误码指定对应的错误消息,它会替代错误码定义时所使用的缺省消息。 I18nMessageManager会自动读取_vfs/i18n/目录下所有的不以下划线为前缀的i18n.yaml文件。Nop平台并没有约定一定要在error.i18n.yaml中定制错误消息,这里的名称是自定义的。
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/canonical-entropy/nop-entropy.git
git@gitee.com:canonical-entropy/nop-entropy.git
canonical-entropy
nop-entropy
nop-entropy
master

搜索帮助