本文档由 g2rain-common 的 README.md 自动同步生成。

G2Rain

# g2rain-common

Maven Central (opens new window) License Java (opens new window) Maven (opens new window)

下一代AI软件开发范式,AI原生Agent平台,开源的企业级SaaS底座。

g2rain 后端公共规范组件,沉淀统一响应与分页模型、异常和错误码体系、JSON 编解码、主体上下文、JWT/DPoP 数据结构、事件同步抽象及通用开发工具;作为平台后端研发支撑层被多个 g2rain 服务复用

官网 (opens new window) · 完整文档 · 公共 API 契约 · 兼容性规则 · Issues (opens new window) · Discussions (opens new window)

# 目录

  • 项目简介
  • 平台定位
  • 业务域说明
  • 功能概览
  • 使用场景
  • 核心流程
  • 流程图
  • 技术栈
  • 环境要求
  • 快速开始
  • 构建与发布
  • 代码质量与测试
  • 接入与使用示例
  • 安全说明
  • 与关联仓库的关系
  • 模块说明
  • 架构与工程文档
  • 职责边界
  • 常见问题
  • 关联仓库
  • 参与贡献
  • 许可证
  • 联系我们
  • 致谢

# 项目简介

g2rain 后端公共规范组件,沉淀统一响应与分页模型、异常和错误码体系、JSON 编解码、主体上下文、JWT/DPoP 数据结构、事件同步抽象及通用开发工具;作为平台后端研发支撑层被多个 g2rain 服务复用

# 平台定位

该仓库位于 g2rain 后端研发支撑层,为多个后端项目提供集成能力、工程化工具或共享扩展。

# 业务域说明

该仓库聚焦于 后端公共模型、通用规范、基础抽象与跨服务复用能力。

核心对象包括:

  • 访问令牌
  • 分页数据
  • 会话
  • 同步事件消息
  • 统一响应结果
  • 业务异常与错误码
  • 应用
  • 主体
  • 主体上下文
  • 字段校验错误
  • Token/DPoP JWT 载荷

主要流程包括:

  • 业务异常到统一 Result 响应的转换流程
  • 请求主体上下文的绑定、读取、任务包装与作用域释放流程
  • 领域事件的发布、通道选择、消息分发与存储处理流程
  • DTO 创建/更新分组校验与字段错误聚合流程

# 本地测试

能力 说明
统一响应与分页模型 通过 Result、PageData、BaseDto、BasePo、BaseVo、SortItem 等类型统一 API 返回、分页、排序和分层数据模型。
异常与错误码体系 通过 ErrorCode、BusinessException、ExceptionProcessor、ExceptionConverter、FieldError 与 SystemErrorCode 统一错误定义、转换和输出。
错误消息解析与本地化 通过 ErrorMessageRegistry、LocalizedErrorMessage、MessageResolver 支持错误消息注册、占位参数解析与多语言扩展。
JSON 编解码 通过 JsonCodec、JsonCodecBuilder 和 JsonCodecFactory 统一 Jackson 配置、对象转换、节点查询与条件字段输出;需要时可在自定义构建器中注册嵌套 JSON 字符串模块。
数字精度保留 RawNumberDeserializer 与 RawNumberNode 保留 JSON 数字的原始文本表达,降低大整数或高精度数字转换损失。
嵌套 JSON 字符串展开 在自定义 JsonCodecBuilder 中注册 NestedJsonStringModule 后,可将形如 {} 或 [] 的字符串按 JSON 解析为 Object 或 JsonNode,适用于嵌套字段场景。
主体与请求上下文 PrincipalContext、PrincipalContextHolder、PrincipalHeaders 和 ScopedContextHolder 统一承载并传播用户、组织、应用及链路上下文。
Token 与 DPoP 模型 TokenJWTHeader、TokenJWTPayload、DPoPJWTHeader、DPoPJWTPayload 提供令牌及 DPoP Proof 的公共数据结构。
事件同步抽象 EventPublisherHub、EventPublisher、MessageDispatcher、AbstractMessageStorage 等类型定义事件发布、分发与存储扩展链路。
跨线程上下文传播 Contexts、ContextExecutors 与可选的 ContextPropagator 将 Principal 及已注册的链路上下文安全传播到虚拟线程或线程池任务。
校验、ID 与通用工具 提供创建/更新校验分组、字段错误聚合、ID 生成接口、MapStruct 转换基类以及字符串、集合、时间、数值等工具。

# 使用场景

场景 说明
统一服务 API 返回 使用 Result 与 PageData 返回成功、失败和分页结果,保持跨服务响应结构一致。
建立领域错误规范 业务模块实现 ErrorCode、抛出 BusinessException,并通过处理器转换为包含字段错误和本地化消息的统一结果。
传递认证主体上下文 网关、Starter 或服务适配层将请求头解析为 PrincipalContext,并在同步任务或 Callable 中安全传播。
提交异步或虚拟线程任务 使用 Contexts 或 ContextExecutors 包装任务,传播 Principal;如已注册 ContextPropagator,同时恢复并清理链路上下文。
同步跨节点缓存或领域状态 通过事件发布器、消息分发器和消息存储扩展点广播 CREATE、UPDATE、DELETE 等变更。
统一 JSON 与参数校验行为 在服务间复用 JSON 编解码配置、原始数字处理及 Create/Update 分组校验。
解析嵌套 JSON 字符串 当上游把对象或数组以字符串嵌入 JSON 时,在自定义 JsonCodecBuilder 中注册 NestedJsonStringModule,使 Map、List 和 JsonNode 路径按 JSON 结构读取。

# 核心流程

# 发布说明

  • 正式版通过 Git Tag 触发 release.yml
  • develop 分支上的 -SNAPSHOT 版本可通过 snapshot.yml 发布
  • Release 流程包含源码包、Javadoc 包和 GPG 签名

# 7. 项目结构

g2rain-common/
├── .github/workflows/
│   ├── release.yml
│   └── snapshot.yml
├── src/main/java/com/g2rain/common/
│   ├── converter
│   ├── enums
│   ├── exception
│   ├── id
│   ├── json
│   ├── model
│   ├── syncer
│   ├── utils
│   ├── validation
│   └── web
├── src/test/java/com/g2rain/common/
└── pom.xml

# 技术栈

类别 说明
运行时 Java 25
其他 Lombok

# 环境要求

  • JDK 25+
  • Maven 3.9+

# 快速开始

步骤 命令或位置 说明
准备构建环境 JDK 25+、Maven 3.9+ 工具组件通常只需要 Java 与 Maven 构建环境。
构建组件 mvn clean package 执行 Maven 构建,生成可发布或可本地安装的组件产物。
本地安装 mvn clean install 安装到本地 Maven 仓库,便于业务工程试用依赖。

版本号以项目构建配置为准,当前识别为 1.0.8。

# 构建与发布

目标 命令 产物 说明
组件产物 mvn clean package g2rain-common-1.0.8.jar 执行 Maven 标准构建,生成可发布的公共库组件产物。
本地 Maven 安装 mvn clean install 本地 Maven 仓库产物 安装到本地 Maven 仓库,便于业务工程本地验证依赖。
正式版本发布 推送版本 Git Tag Maven Central 正式版本 release.yml 使用 JDK 25 执行 mvn -B -P release clean deploy,并完成源码包、Javadoc 与 GPG 签名发布。
Snapshot 发布 推送 develop 分支的 -SNAPSHOT 版本 Sonatype Snapshot 版本 snapshot.yml 仅在项目版本以 -SNAPSHOT 结尾时执行 mvn -B clean deploy -DskipTests。

# 代码质量与测试

检查项 命令 说明
Maven Enforcer mvn validate 约束 JDK 版本、Maven 版本与依赖规则。
单元测试 mvn test 运行 JUnit 测试;该生命周期同时执行 Maven Enforcer 规则。
Checkstyle mvn checkstyle:check 检查 Java 代码风格与组织规范。
PMD mvn pmd:check 执行静态规则检查,识别潜在代码问题。
SpotBugs mvn spotbugs:check 识别潜在缺陷和风险代码。
JaCoCo mvn clean test jacoco:report 尝试生成覆盖率报告;当前 Surefire 的 argLine 配置会导致缺少 execution data,不能据此声明覆盖率。

最近一次已记录验证为 2026-09-06 的 mvn test:256 项测试通过,无失败、错误或跳过;详情见测试说明。

# 接入与使用示例

示例 方式 内容 说明
Maven 依赖引入 Maven <dependency><groupId>com.g2rain</groupId><artifactId>g2rain-common</artifactId><version>1.0.8</version></dependency> 在业务工程 pom.xml 中引入该组件。
返回成功结果 Java Result.success(data) 使用统一 Result 包装业务返回数据。
返回分页结果 Java Result.successPage(pageNum, pageSize, total, records) 使用 PageData 结构返回分页数据。
读取主体上下文 Java PrincipalContext context = PrincipalContextHolder.require() 在已绑定请求作用域中读取当前用户、组织、应用与链路信息。
统一 JSON 编解码 Java JsonCodec codec = JsonCodecFactory.instance() 获取默认编解码器,执行对象、字符串、字节数组与 JsonNode 之间的转换。
展开嵌套 JSON 字符串 Java JsonCodecBuilder.builder().withDefaults().withConfig(builder -> builder.addModule(new NestedJsonStringModule())).build() 默认 JsonCodecFactory 不会注册该模块;仅在调用方明确需要将 {} 或 [] 字符串展开时启用。
执行创建/更新校验 Java Validations.validateSave(dto) 根据 DTO 标识选择 CreateGroup 或 UpdateGroup,并聚合字段错误。

# 安全说明

主题 说明
依赖可信边界 作为平台共享组件或构建工具,应通过组织 Maven 仓库、版本锁定和发布流程控制依赖来源。
主体上下文可信边界 PrincipalContext 只负责承载上下文;外部请求头必须由网关或可信适配层完成认证、过滤和重建,业务服务不应直接信任客户端伪造的 PrincipalHeaders。
JWT/DPoP 职责边界 TokenJWT* 与 DPoPJWT* 是公共数据结构,不等同于完整的签名、验签或令牌校验实现;安全校验应由 IAM、网关或 Starter 中的专用组件完成。
JSON 输入边界 解析不可信 JSON 时仍需限制请求体大小、嵌套深度和允许的目标类型;RawNumber 仅用于保留数字表达,NestedJsonStringModule 仅改变解析形态,二者均不替代业务范围校验。
ScopedValue 传播 异步任务应使用 PrincipalContextHolder 提供的 wrap、runWith 或 callWith 显式传播上下文,避免跨任务读取错误主体。

# 与关联仓库的关系

本仓库位于 g2rain 后端研发支撑层,通过 Maven 依赖向 Starter、网关、IAM、基础服务和业务服务提供稳定的公共 API;具体框架装配与运行时实现由 g2rain-spring-boot-starter 等上层组件完成。

# 模块说明

模块 职责说明 代码线索
model 定义 DTO/PO/VO 基类、统一 Result、分页 PageData、下拉选择与排序模型。 BaseDto、BasePo、BaseVo、Result、PageData、SortItem
exception 定义错误码、业务异常、字段错误、异常转换、默认处理器及消息本地化扩展。 ErrorCode、BusinessException、ExceptionConverter、DefaultExceptionProcessor、ErrorMessageRegistry
json 封装 Jackson 编解码器、构建器、工厂、条件字段输出、原始数字节点和可选的嵌套 JSON 字符串反序列化。 JsonCodec、JsonCodecBuilder、JsonCodecFactory、RawNumberDeserializer、NestedJsonStringModule、ConditionalPropertyWriter
concurrent 在虚拟线程或线程池任务中传播 Principal,并通过可选 SPI 传播与清理链路上下文。 Contexts、ContextExecutors、ContextPropagator
web 定义主体上下文、标准透传请求头、作用域持有器以及 Token/DPoP JWT Header 与 Payload。 PrincipalContext、PrincipalContextHolder、PrincipalHeaders、ScopedContextHolder、TokenJWTPayload、DPoPJWTPayload
syncer 定义领域事件发布、通道聚合、消息分发和消息存储注册扩展链路。 EventPublisherHub、EventPublisher、DefaultMessageDispatcher、AbstractMessageStorage、MessageStorageRegistry
validation 提供 Create/Update 校验分组、DTO 保存场景校验和字段错误聚合。 Validations、CreateGroup、UpdateGroup、FieldError
converter / id / enums 提供 MapStruct 转换基类、ID 生成接口及组织、会话等公共枚举。 CommonConverter、IdGenerator、OrganType、SessionType
utils 提供断言、集合、字符串、时间、数值、媒体类型和常量等无框架工具。 Asserts、Collections、Strings、Moments、Decimals、MediaTypes、Constants

# 架构与工程文档

主题 文档
项目机器可读事实 docs/project.yaml
架构与包职责 架构总览 · 包与模块
依赖与已知风险 依赖边界 · 架构偏差
公共契约与版本演进 公共 API 契约 · 兼容性
开发与发布 完成定义 · Maven Central 发布
安全 安全边界

所有 public 类型、方法、序列化字段、枚举值、错误码和请求头都可能成为消费方契约。破坏性变化需要明确迁移说明和版本策略,并在代表性消费项目中完成验证。

# 职责边界

该仓库主要负责:

  • 负责定义跨服务复用的响应、分页、异常、校验、JSON、主体上下文、JWT/DPoP 数据结构与事件同步公共 API
  • 负责提供低耦合扩展契约和无具体业务含义的基础工具,并通过单元测试保持公共行为稳定

该仓库默认不负责:

  • 不负责校验外部请求身份、签发或验签令牌,也不应直接信任客户端传入的主体请求头
  • 不负责 Spring Bean 自动装配、消息中间件适配、ID 算法实现或具体业务数据持久化
  • 不承载任何具体业务域流程,也不作为用户、组织、应用等主数据的权威来源

# 常见问题

问题 可能原因 处理建议
业务工程无法解析依赖 组件未发布到当前 Maven 仓库,或 groupId/artifactId/version 配置不一致。 检查 Maven 仓库地址、版本号和业务工程 dependencyManagement 配置。
PrincipalContextHolder.require() 报错 当前调用不在已绑定 PrincipalContext 的作用域内,或异步任务未传播上下文。 在请求适配层使用 runWith/callWith 绑定上下文;提交异步任务前使用 wrap 包装 Runnable 或 Callable。
校验抛出 PARAM_INVALID CreateGroup、UpdateGroup 或 Default 组约束未通过。 读取 BusinessException 携带的 FieldError 列表,检查字段名、拒绝值和对应校验注解。
JSON 数字精度或输出字段不符合预期 未使用项目统一 JsonCodec 配置,或未启用 RawNumber/条件字段相关处理。 统一通过 JsonCodecFactory/JsonCodecBuilder 创建编解码器,并核对 RawNumberDeserializer 与 MixIn 配置。
嵌套的 JSON 字符串未展开 JsonCodecFactory.instance() 只装配默认配置,不会自动注册 NestedJsonStringModule。 通过 JsonCodecBuilder.withConfig 显式添加 NestedJsonStringModule;继续校验字段值、输入大小和业务约束。
同步事件未被处理 发布通道、dataSource、EventType 或 MessageStorageRegistry 注册不匹配。 确认存储扩展已在初始化阶段注册,并核对 EventMessage 的数据源和事件类型。
异步任务中主体或链路信息丢失 任务直接提交到线程池或虚拟线程,未在父线程完成上下文包装。 提交前通过 Contexts.wrap、Contexts.wrapCallable 或 ContextExecutors 包装任务;如需链路上下文,确认 Starter 已注册 ContextPropagator。

# 关联仓库

仓库 协作关系
g2rain-spring-boot-starter 通常位于公共组件的上层,复用 g2rain-common 的基础模型、工具能力与工程约定,并进一步封装为 Starter。

# 参与贡献

我们欢迎所有形式的贡献:Issue 反馈、文档改进、功能建议与代码提交。

推荐流程:

  1. Fork 本仓库。
  2. 创建特性分支:git checkout -b feature/your-feature-name。
  3. 提交更改:git commit -m "Add some feature"。
  4. 推送分支:git push origin feature/your-feature-name。
  5. 提交 Pull Request。

代码贡献前请尽量补充必要的测试和文档,并确保构建、测试与静态检查通过。

提交前请阅读代码约定、兼容性规则和完成定义。

# 许可证

本项目基于 Apache 2.0许可证 (opens new window) 开源。

# 联系我们

# 致谢

感谢所有为 g2rain 项目提交 Issue、代码、文档、建议和使用反馈的开发者们!

# Maven Central 发布信息

以下坐标为本次官网同步的发布版本,可从 Maven Central (opens new window) 获取。

ArtifactId 当前版本 类型与用途 Maven Central
g2rain-common 1.0.8 JAR,Java 公共基础库 查看 (opens new window)