掘金 人工智能 07月22日 10:21
OneCode 3.0 @APIEventAnnotation 注解速查手册
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

OneCode 3.0 框架中的 @APIEventAnnotation 注解是声明 API 事件的核心工具,它通过元数据配置实现前端 UI 事件与后端 API 服务的解耦,构建“事件驱动、数据绑定、响应处理”的全链路交互机制。该注解极大地简化了前端 JavaScript 代码,提升了开发效率与代码可维护性。文章详细介绍了注解的定义、元数据信息,并深入剖析了 queryAsync、autoRun、autoDisplay 等基础配置属性,以及 bindMenu、bindFieldEvent、bindFormEvent 等事件绑定属性,还涵盖了 requestDataSource、responseDataTarget 等数据映射属性,以及 beforeData、beforeInvoke、onExecuteSuccess 等生命周期回调属性。最后,文章还列举了表单、表格、树形组件等多种核心事件枚举,为开发者提供了全面的注解使用指南。

💡 **注解核心功能与优势**:@APIEventAnnotation 是 OneCode 3.0 框架中用于声明 API 事件的核心注解,其主要作用是将前端 UI 事件与后端 API 服务进行绑定,从而实现“事件驱动、数据绑定、响应处理”的全链路交互机制。通过使用元数据配置来替代传统的命令式编程,该注解能够显著减少前端 JavaScript 代码量,从而提高开发效率和代码的可维护性,使前后端交互更加高效和规范。

🚀 **基础配置属性解析**:注解提供了如 `queryAsync`(是否异步执行 API 请求)、`autoRun`(是否自动执行 API 请求)、`autoDisplay`(是否自动显示 API 调用结果)、`isAllform`(是否将表单所有字段作为请求参数)以及 `index`(API 事件执行顺序)等基础配置属性。这些属性允许开发者精细化控制 API 请求的执行方式、时机和数据处理流程,以适应不同的业务场景需求。

🔗 **丰富的事件绑定与数据映射**:该注解支持绑定多种 UI 组件的事件,包括菜单项 (`bindMenu`)、自定义动作 (`bindAction`)、表单字段 (`bindFieldEvent`)、表格 (`bindGridEvent`)、树形组件 (`bindTreeEvent`)、标签页 (`bindTabsEvent`) 等,并能通过 `requestDataSource` 和 `responseDataTarget` 实现请求参数与响应数据的灵活映射。此外,还提供了 `responseCallback` 用于配置回调路径,以及 `customRequestData`、`customResponseData` 等常用数据配置,极大地增强了组件间的交互能力和数据流的管理。

⏳ **生命周期回调与错误处理**:@APIEventAnnotation 注解还覆盖了 API 请求的整个生命周期,提供了 `beforeData`(数据准备前)、`beforeInvoke`(请求发送前)、`onData`(接收到数据时)、`onExecuteSuccess`(执行成功时)、`onExecuteError`(执行失败时)以及 `afterInvok`(请求完成时)等回调钩子。同时,`onError` 和 `onErrorAction` 等属性也为开发者提供了强大的错误处理机制,确保了请求过程的健壮性和可控性。

🛠️ **多样的事件枚举与应用**:文章详细列举了如表单事件(SAVE, RESET, SEARCH)、多表表单事件(ADD_ROW, DELETE_ROW)、字段事件(CHANGE, BLUR)、表格事件(LOAD, REFRESH, EXPORT)、树形组件事件(EXPAND, SELECT)以及快捷键事件(CTRL_S, ESC)等丰富的核心事件枚举。这些枚举使得开发者能够通过简单的配置,将特定的 UI 操作与后端 API 事件进行高效关联,实现高度可定制化的前端交互逻辑。

一、注解概述与基本信息

1.1 注解定义与核心功能

@APIEventAnnotation 是 OneCode 3.0 框架中用于声明 API 事件的核心注解,主要用于将前端 UI 事件与后端 API 服务进行绑定,实现 "事件驱动、数据绑定、响应处理" 的全链路交互机制。该注解通过元数据配置替代传统的命令式编程,大幅减少了前端 JavaScript 代码量,提高了开发效率和代码可维护性。

该注解的完整定义如下:

@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD})public @interface APIEventAnnotation {    // 配置属性...}

该注解主要应用于 Controller 类的方法上,用于定义该方法处理的 API 事件。

1.2 注解元数据信息

元数据项说明
作用目标方法只能应用于 Controller 类的方法
生命周期运行时保留注解信息在运行时可用
继承性不继承子类不会继承父类的注解配置
核心功能事件绑定、数据映射、请求配置、响应处理实现前后端交互的全链路管理

二、属性详解与使用示例

2.1 基础配置属性

1. queryAsync

示例代码

@APIEventAnnotation(    queryAsync = false, // 同步执行请求    // 其他配置...)public ResultModel handleSyncRequest() {    // 业务逻辑}

2. autoRun

示例代码

@APIEventAnnotation(    autoRun = true, // 页面加载后自动执行    // 其他配置...)public ResultModel loadInitialData() {    // 加载初始数据的业务逻辑}

3. autoDisplay

示例代码

@APIEventAnnotation(    autoDisplay = true, // 自动显示结果    // 其他配置...)public ResultModel showSimpleResult() {    // 返回简单结果的业务逻辑}

4. isAllform

示例代码

@APIEventAnnotation(    isAllform = true, // 提交表单所有字段    // 其他配置...)public ResultModel submitFullFormData() {    // 处理表单全部数据的业务逻辑}

5. index

示例代码

@APIEventAnnotation(    index = 10, // 执行顺序为第10位    // 其他配置...)public ResultModel executeWithPriority() {    // 具有特定执行顺序的业务逻辑}

2.2 事件绑定属性

6. bindMenu

示例代码

@APIEventAnnotation(    bindMenu = {        CustomMenuItem.SAVE, // 绑定"保存"菜单项        CustomMenuItem.EXPORT // 绑定"导出"菜单项    },    // 其他配置...)public ResultModel handleMenuEvents() {    // 处理菜单事件的业务逻辑}

7. bindAction

示例代码

@APIEventAnnotation(    bindAction = {        CustomAction.PREVIEW, // 绑定"预览"动作        CustomAction.EDIT // 绑定"编辑"动作    },    // 其他配置...)public ResultModel handleCustomActions() {    // 处理自定义动作的业务逻辑}

8. enumClass

示例代码

@APIEventAnnotation(    enumClass = CustomEventType.class, // 指定自定义事件枚举类    // 其他配置...)public ResultModel handleCustomEvents() {    // 处理自定义事件的业务逻辑}

9. bindFieldEvent

示例代码

@APIEventAnnotation(    bindFieldEvent = {        CustomFieldEvent.CHANGE, // 绑定"变化"事件        CustomFieldEvent.BLUR // 绑定"失去焦点"事件    },    // 其他配置...)public ResultModel handleFieldEvents() {    // 处理表单字段事件的业务逻辑}

10. bindGalleryEvent

示例代码

@APIEventAnnotation(    bindGalleryEvent = {        CustomGalleryEvent.SELECT_ITEM, // 绑定"选择项目"事件        CustomGalleryEvent.VIEW_DETAIL // 绑定"查看详情"事件    },    // 其他配置...)public ResultModel handleGalleryEvents() {    // 处理图片画廊事件的业务逻辑}

11. bindTitleBlockEvent

示例代码

@APIEventAnnotation(    bindTitleBlockEvent = {        CustomTitleBlockEvent.FULLSCREEN, // 绑定"全屏"事件        CustomTitleBlockEvent.COLLAPSE // 绑定"折叠"事件    },    // 其他配置...)public ResultModel handleTitleBlockEvents() {    // 处理标题块事件的业务逻辑}

12. bindContentBlockEvent

示例代码

@APIEventAnnotation(    bindContentBlockEvent = {        CustomContentBlockEvent.REFRESH, // 绑定"刷新"事件        CustomContentBlockEvent.LOAD_MORE // 绑定"加载更多"事件    },    // 其他配置...)public ResultModel handleContentBlockEvents() {    // 处理内容块事件的业务逻辑}

13. bindGridEvent

示例代码

@APIEventAnnotation(    bindGridEvent = {        CustomGridEvent.LOAD, // 绑定"加载"事件        CustomGridEvent.REFRESH, // 绑定"刷新"事件        CustomGridEvent.EXPORT // 绑定"导出"事件    },    // 其他配置...)public ResultModel handleGridEvents() {    // 处理表格事件的业务逻辑}

14. bindMGridEvent

示例代码

@APIEventAnnotation(    bindMGridEvent = {        CustomMGridEvent.MERGE_CELL, // 绑定"合并单元格"事件        CustomMGridEvent.GROUP_ROW // 绑定"分组行"事件    },    // 其他配置...)public ResultModel handleMGridEvents() {    // 处理复杂表格事件的业务逻辑}

15. bindTreeEvent

示例代码

@APIEventAnnotation(    bindTreeEvent = {        CustomTreeEvent.EXPAND, // 绑定"展开"事件        CustomTreeEvent.SELECT, // 绑定"选择"事件        CustomTreeEvent.CHECK // 绑定"检查"事件    },    // 其他配置...)public ResultModel handleTreeEvents() {    // 处理树形组件事件的业务逻辑}

16. bindFormEvent

示例代码

@APIEventAnnotation(    bindFormEvent = {        CustomFormEvent.SAVE, // 绑定"保存"事件        CustomFormEvent.RESET, // 绑定"重置"事件        CustomFormEvent.SEARCH // 绑定"搜索"事件    },    // 其他配置...)public ResultModel handleFormEvents() {    // 处理表单事件的业务逻辑}

17. bindMFormEvent

示例代码

@APIEventAnnotation(    bindMFormEvent = {        CustomMFormEvent.ADD_ROW, // 绑定"添加行"事件        CustomMFormEvent.DELETE_ROW // 绑定"删除行"事件    },    // 其他配置...)public ResultModel handleMFormEvents() {    // 处理多表表单事件的业务逻辑}

18. bindTabsEvent

示例代码

@APIEventAnnotation(    bindTabsEvent = {        CustomTabsEvent.SWITCH, // 绑定"切换"事件        CustomTabsEvent.CLOSE // 绑定"关闭"事件    },    // 其他配置...)public ResultModel handleTabsEvents() {    // 处理标签页事件的业务逻辑}

19. bindHotKeyEvent

示例代码

@APIEventAnnotation(    bindHotKeyEvent = {        CustomHotKeyEvent.CTRL_S, // 绑定"Ctrl+S"快捷键        CustomHotKeyEvent.ESC // 绑定"ESC"键    },    // 其他配置...)public ResultModel handleHotKeyEvents() {    // 处理快捷键事件的业务逻辑}

2.3 数据映射属性

20. requestDataSource

示例代码

@APIEventAnnotation(    requestDataSource = {        @RequestPathAnnotation(type = "form", name = "userForm", path = "id"), // 从表单获取ID        @RequestPathAnnotation(type = "component", name = "deptTree", path = "selectedId") // 从组件获取选中ID    },    // 其他配置...)public ResultModel handleDataSources() {    // 处理数据源的业务逻辑}

21. responseDataTarget

示例代码

@APIEventAnnotation(    responseDataTarget = {        @ResponsePathAnnotation(type = "form", name = "userForm", path = "lastUpdateTime") // 将响应数据映射到表单的lastUpdateTime字段    },    // 其他配置...)public ResultModel handleResponseTargets() {    // 处理响应目标的业务逻辑}

22. responseCallback

示例代码

@APIEventAnnotation(    responseCallback = {        @CallBackPathAnnotation(name = "updateStatus", params = {"{{response.status}}") // 回调函数,参数为响应中的status    },    // 其他配置...)public ResultModel handleCallbacks() {    // 处理回调的业务逻辑}

23. customRequestData

示例代码

@APIEventAnnotation(    customRequestData = {        RequestPathEnum.FORM_ID, // 表单ID        RequestPathEnum.GLOBAL_USER_INFO // 全局用户信息    },    // 其他配置...)public ResultModel handleCustomRequests() {    // 处理自定义请求数据的业务逻辑}

24. customResponseData

示例代码

@APIEventAnnotation(    customResponseData = {        ResponsePathEnum.FORM_RESET, // 表单重置        ResponsePathEnum.MESSAGE_TIP // 消息提示    },    // 其他配置...)public ResultModel handleCustomResponses() {    // 处理自定义响应数据的业务逻辑}

25. customResponseCallback

示例代码

@APIEventAnnotation(    customResponseCallback = {        CallBackPathEnum.UPDATE_STATUS // 更新状态回调    },    // 其他配置...)public ResultModel handleCustomCallbacks() {    // 处理自定义回调的业务逻辑}

2.4 生命周期回调属性

26. beforeData

示例代码

@APIEventAnnotation(    beforeData = {        CustomBeforData.MESSAGE // 数据准备前的提示    },    // 其他配置...)public ResultModel handleBeforeData() {    // 处理数据准备前逻辑的业务逻辑}

27. beforeDataAction

示例代码

@APIEventAnnotation(    beforeDataAction = {        @CustomAction(name = "validateForm") // 表单验证动作    },    // 其他配置...)public ResultModel handleBeforeDataActions() {    // 处理数据准备前动作的业务逻辑}@APIEventAnnotation(    beforeInvoke = {        @CustomBeforInvoke(message = "正在发送请求...") // 请求发送前的提示    },    // 其他配置...)public ResultModel handleBeforeInvoke() {    // 处理请求发送前逻辑的业务逻辑}

28. beforeInvoke

示例代码

@APIEventAnnotation(    beforeInvoke = {      CustomBeforInvoke.MESSAGE // 请求发送前的提示    },    // 其他配置...)public ResultModel handleBeforeInvoke() {    // 处理请求发送前逻辑的业务逻辑}

29. beforeInvokeAction

示例代码

@APIEventAnnotation(    beforeInvokeAction = {      CustomBeforInvoke.BUSY // 增加遮罩    },    // 其他配置...)public ResultModel handleBeforeInvokeActions() {    // 处理请求发送前动作的业务逻辑}

30. callback

示例代码

@APIEventAnnotation(    callback = {        @CustomCallBack(message = "响应处理完成") // 响应处理后的提示    },    // 其他配置...)public ResultModel handleCallbacks() {    // 处理响应回调的业务逻辑}

31. callbackAction

示例代码

@APIEventAnnotation(    callbackAction = {        @CustomAction(name = "refreshGrid"), // 刷新表格动作        @CustomAction(name = "resetForm") // 重置表单动作    },    // 其他配置...)public ResultModel handleCallbackActions() {    // 处理响应后动作的业务逻辑}

32. afterInvok

示例代码

@APIEventAnnotation(    afterInvok = {        CustomCallBack.FREE // 解除遮罩    },    // 其他配置...)public ResultModel handleAfterInvok() {    // 处理请求完成后逻辑的业务逻辑}

33. afterInvokAction

示例代码

@APIEventAnnotation(    afterInvokAction = {        @CustomAction(name = "cleanup") // 清理动作    },    // 其他配置...)public ResultModel handleAfterInvokActions() {    // 处理请求完成后动作的业务逻辑}

34. onError

示例代码

@APIEventAnnotation(    onError = {        CustomOnError.MESSAGE// 请求出错时的提示    },    // 其他配置...)public ResultModel handleOnError() {    // 处理请求错误逻辑的业务逻辑}

35. onErrorAction

示例代码

@APIEventAnnotation(    onErrorAction = {        @CustomAction(name = "hideLoading"), // 隐藏加载动画动作        @CustomAction(name = "showError") // 显示错误信息动作    },    // 其他配置...)public ResultModel handleOnErrorActions() {    // 处理请求出错动作的业务逻辑}

36. onData

示例代码

@APIEventAnnotation(    onData = {       CustomOnData.RELOAD// 接收到数据时的提示    },    // 其他配置...)public ResultModel handleOnData() {    // 处理接收到数据逻辑的业务逻辑}

37. onDataAction

示例代码

@APIEventAnnotation(    onDataAction = {        @CustomAction(name = "processData") // 处理数据动作    },    // 其他配置...)public ResultModel handleOnDataActions() {    // 处理接收到数据动作的业务逻辑}

38. onExecuteSuccess

示例代码

@APIEventAnnotation(    onExecuteSuccess = {      CustomOnExecueSuccess.MSG// 请求成功时的提示    },    // 其他配置...)public ResultModel handleOnExecuteSuccess() {    // 处理请求成功逻辑的业务逻辑}

39. onExecuteSuccessAction

示例代码

@APIEventAnnotation(    onExecuteSuccessAction = {        @CustomAction(name = "refreshPage"), // 刷新页面动作        @CustomAction(name = "redirectToSuccessPage") // 跳转到成功页面动作    },    // 其他配置...)public ResultModel handleOnExecuteSuccessActions() {    // 处理请求成功动作的业务逻辑}

40. onExecuteError

示例代码

@APIEventAnnotation(    onExecuteError = {       CustomOnExecueError.FREE // 解除遮罩    },    // 其他配置...)public ResultModel handleOnExecuteError() {    // 处理请求失败逻辑的业务逻辑}

41. onExecuteErrorAction

示例代码

@APIEventAnnotation(    onExecuteError = {        @CustomAction(name = "reloadPage", method = "call", type = ActionTypeEnum.other, target = "callback", args = {"{SPA.reloadPage()}"}),    },    // 其他配置...)public ResultModel handleOnExecuteError() {    // 处理请求失败逻辑的业务逻辑}

三、核心事件枚举详解

3.1 表单相关事件

表单事件(CustomFormEvent)

事件名称描述触发时机
SAVE保存事件用户点击保存按钮或执行保存操作时触发
RESET重置事件用户点击重置按钮或执行重置操作时触发
SEARCH搜索事件用户点击搜索按钮或执行搜索操作时触发
CANCEL取消事件用户点击取消按钮或执行取消操作时触发
SUBMIT提交事件用户提交表单时触发
VALIDATE验证事件表单验证时触发

示例代码

@APIEventAnnotation(    bindFormEvent = {        CustomFormEvent.SAVE, // 绑定保存事件        CustomFormEvent.SEARCH // 绑定搜索事件    },    // 其他配置...)public ResultModel handleFormEvents() {    // 处理表单事件的业务逻辑}

多表表单事件(CustomMFormEvent)

事件名称描述触发时机
ADD_ROW添加行事件用户点击添加行按钮或执行添加行操作时触发
DELETE_ROW删除行事件用户点击删除行按钮或执行删除行操作时触发
EDIT_ROW编辑行事件用户点击编辑行按钮或执行编辑行操作时触发
BATCH_PROCESS批量处理事件用户执行批量处理操作时触发

示例代码

@APIEventAnnotation(    bindMFormEvent = {        CustomMFormEvent.ADD_ROW, // 绑定添加行事件        CustomMFormEvent.DELETE_ROW // 绑定删除行事件    },    // 其他配置...)public ResultModel handleMFormEvents() {    // 处理多表表单事件的业务逻辑}

字段事件(CustomFieldEvent)

事件名称描述触发时机
CHANGE变化事件字段值发生变化时触发
BLUR失去焦点事件字段失去焦点时触发
FOCUS获得焦点事件字段获得焦点时触发
VALIDATE验证事件字段验证时触发

示例代码

@APIEventAnnotation(    bindFieldEvent = {        CustomFieldEvent.CHANGE, // 绑定变化事件        CustomFieldEvent.BLUR // 绑定失去焦点事件    },    // 其他配置...)public ResultModel handleFieldEvents() {    // 处理字段事件的业务逻辑}

3.2 数据展示相关事件

表格事件(CustomGridEvent)

事件名称描述触发时机
LOAD加载事件表格加载数据时触发
REFRESH刷新事件表格刷新数据时触发
EXPORT导出事件用户点击导出按钮或执行导出操作时触发
SELECT选择事件用户选择表格行时触发
DESELECT取消选择事件用户取消选择表格行时触发
PAGE_CHANGE分页变化事件表格分页变化时触发

示例代码

@APIEventAnnotation(    bindGridEvent = {        CustomGridEvent.LOAD, // 绑定加载事件        CustomGridEvent.REFRESH // 绑定刷新事件    },    // 其他配置...)public ResultModel handleGridEvents() {    // 处理表格事件的业务逻辑}

复杂表格事件(CustomMGridEvent)

事件名称描述触发时机
MERGE_CELL合并单元格事件合并表格单元格时触发
GROUP_ROW分组行事件分组表格行时触发
UNGROUP_ROW取消分组行事件取消分组表格行时触发
SORT排序事件表格排序时触发
FILTER过滤事件表格过滤时触发

示例代码

@APIEventAnnotation(    bindTreeEvent = {        CustomTreeEvent.EXPAND, // 绑定展开事件        CustomTreeEvent.SELECT // 绑定选择事件    },    // 其他配置...)public ResultModel handleTreeEvents() {    // 处理树形组件事件的业务逻辑}

树形组件事件(CustomTreeEvent)

事件名称描述触发时机
EXPAND展开事件树形节点展开时触发
COLLAPSE折叠事件树形节点折叠时触发
SELECT选择事件用户选择树形节点时触发
DESELECT取消选择事件用户取消选择树形节点时触发
CHECK选中事件用户选中树形节点时触发
UNCHECK取消选中事件用户取消选中树形节点时触发

示例代码

@APIEventAnnotation(    bindTreeEvent = {        CustomTreeEvent.EXPAND, // 绑定展开事件        CustomTreeEvent.SELECT // 绑定选择事件    },    // 其他配置...)public ResultModel handleTreeEvents() {    // 处理树形组件事件的业务逻辑}

标签页事件(CustomTabsEvent)

事件名称描述触发时机
SWITCH切换事件标签页切换时触发
CLOSE关闭事件标签页关闭时触发
ADD添加事件添加新标签页时触发
REMOVE删除事件删除标签页时触发

示例代码

@APIEventAnnotation(    bindTabsEvent = {        CustomTabsEvent.SWITCH, // 绑定切换事件        CustomTabsEvent.CLOSE // 绑定关闭事件    },    // 其他配置...)public ResultModel handleTabsEvents() {    // 处理标签页事件的业务逻辑}

3.3 其他常用事件

快捷键事件(CustomHotKeyEvent)

事件名称描述触发时机
CTRL_SCtrl+S 事件用户按下 Ctrl+S 组合键时触发
CTRL_OCtrl+O 事件用户按下 Ctrl+O 组合键时触发
CTRL_PCtrl+P 事件用户按下 Ctrl+P 组合键时触发
ESCESC 事件用户按下 ESC 键时触发
ENTEREnter 事件用户按下 Enter 键时触发

示例代码

@APIEventAnnotation(    bindHotKeyEvent = {        CustomHotKeyEvent.CTRL_S, // 绑定Ctrl+S事件        CustomHotKeyEvent.ESC // 绑定ESC事件    },    // 其他配置...)public ResultModel handleHotKeyEvents() {    // 处理快捷键事件的业务逻辑}

标题块事件(CustomTitleBlockEvent)

事件名称描述触发时机
FULLSCREEN全屏事件用户点击全屏按钮或执行全屏操作时触发
COLLAPSE折叠事件用户点击折叠按钮或执行折叠操作时触发
EXPAND展开事件用户点击展开按钮或执行展开操作时触发
CLOSE关闭事件用户点击关闭按钮或执行关闭操作时触发

示例代码

@APIEventAnnotation(    bindTitleBlockEvent = {        CustomTitleBlockEvent.FULLSCREEN, // 绑定全屏事件        CustomTitleBlockEvent.COLLAPSE // 绑定折叠事件    },    // 其他配置...)public ResultModel handleTitleBlockEvents() {    // 处理标题块事件的业务逻辑}

内容块事件(CustomContentBlockEvent)

事件名称描述触发时机
REFRESH刷新事件用户点击刷新按钮或执行刷新操作时触发
LOAD_MORE加载更多事件用户点击加载更多按钮或执行加载更多操作时触发
COLLAPSE折叠事件用户点击折叠按钮或执行折叠操作时触发
EXPAND展开事件用户点击展开按钮或执行展开操作时触发

示例代码

@APIEventAnnotation(    bindContentBlockEvent = {        CustomContentBlockEvent.REFRESH, // 绑定刷新事件        CustomContentBlockEvent.LOAD_MORE // 绑定加载更多事件    },    // 其他配置...)public ResultModel handleContentBlockEvents() {    // 处理内容块事件的业务逻辑}

四、完整使用示例

4.1 表单提交场景示例

@Controller@RequestMapping("/api/user")public class UserController {    @PostMapping("/save")    @ResponseBody    @APIEventAnnotation(        // 事件绑定        bindFormEvent = CustomFormEvent.SAVE, // 绑定表单保存事件        bindHotKeyEvent = CustomHotKeyEvent.CTRL_S, // 绑定Ctrl+S快捷键        // 请求数据源        requestDataSource = {            @RequestPathAnnotation(type = "form", name = "userForm", path = "id"), // 从表单获取ID            @RequestPathAnnotation(type = "form", name = "userForm", path = "name"), // 从表单获取姓名            @RequestPathAnnotation(type = "form", name = "userForm", path = "email") // 从表单获取邮箱        },        // 响应数据目标        responseDataTarget = {            @ResponsePathAnnotation(type = "form", name = "userForm", path = "lastUpdateTime") // 将响应数据映射到表单的lastUpdateTime字段        },        // 生命周期回调        beforeInvoke = @CustomBeforInvoke.MESSAGE, // 请求发送前的提示        onExecuteSuccess = @CustomOnExecueSuccess.MESSAGE, // 请求成功时的提示        onExecuteError = @CustomOnExecueError.MESSAGE// 请求失败时的提示    )    public ResultModel<User> saveUser(@RequestBody User user) {        // 业务逻辑实现        User savedUser = userService.save(user);        return ResultModel.success(savedUser);    }}

4.2 数据加载与分页场景示例

@Controller@RequestMapping("/api/data")public class DataController {    @GetMapping("/list")    @ResponseBody    @APIEventAnnotation(        // 事件绑定        bindGridEvent = CustomGridEvent.LOAD, // 绑定表格加载事件        autoRun = true, // 页面加载后自动执行        // 请求数据源        requestDataSource = {            @RequestPathAnnotation(type = "component", name = "pageSize", path = "value"), // 从组件获取分页大小            @RequestPathAnnotation(type = "component", name = "currentPage", path = "value") // 从组件获取当前页码        },        // 响应数据目标        responseDataTarget = {            @ResponsePathAnnotation(type = "grid", name = "dataGrid", path = "data") // 将响应数据映射到表格的数据字段        },        // 生命周期回调       beforeInvoke = @CustomBeforInvoke.MESSAGE, // 请求发送前的提示        onExecuteSuccess = @CustomOnExecueSuccess.MESSAGE, // 请求成功时的提示        onExecuteError = @CustomOnExecueError.MESSAGE// 请求失败时的提示    )    public ResultModel<Page<Data>> loadData(@RequestParam Integer pageSize, @RequestParam Integer currentPage) {        // 业务逻辑实现        Page<Data> dataPage = dataService.findPage(pageSize, currentPage);        return ResultModel.success(dataPage);    }}

4.3 树形组件操作场景示例

@Controller@RequestMapping("/api/tree")public class TreeController {    @GetMapping("/nodes")    @ResponseBody    @APIEventAnnotation(        // 事件绑定        bindTreeEvent = CustomTreeEvent.EXPAND, // 绑定树形节点展开事件        // 请求数据源        requestDataSource = {            @RequestPathAnnotation(type = "tree", name = "treeComponent", path = "selectedId") // 从树形组件获取选中节点ID        },        // 响应数据目标        responseDataTarget = {            @ResponsePathAnnotation(type = "tree", name = "treeComponent", path = "children") // 将响应数据映射到树形组件的子节点字段        },        // 生命周期回调      beforeInvoke = @CustomBeforInvoke.MESSAGE, // 请求发送前的提示        onExecuteSuccess = @CustomOnExecueSuccess.MESSAGE, // 请求成功时的提示        onExecuteError = @CustomOnExecueError.MESSAGE// 请求失败时的提示    )    )    public ResultModel<List<TreeNode>> loadTreeNodes(@RequestParam String parentId) {        // 业务逻辑实现        List<TreeNode> nodes = treeService.findChildren(parentId);        return ResultModel.success(nodes);    }}

五、最佳实践与注意事项

5.1 事件绑定最佳实践

    单一职责原则:每个 API 事件注解应专注于处理单一类型的事件或功能,避免绑定过多不相关的事件合理选择事件类型:根据业务场景选择最合适的事件类型(如表单事件、表格事件等),避免使用通用事件代替特定事件事件优先级设置:对于需要按特定顺序执行的多个 API 事件,通过index属性设置合理的执行顺序事件解耦:避免在一个 API 事件中处理过多的业务逻辑,应将复杂业务逻辑分解为多个独立的 API 事件事件命名规范:遵循统一的事件命名规范,提高代码可读性和可维护性

5.2 数据映射最佳实践

    精简数据映射:只映射必要的数据字段,避免映射过多无关数据数据验证前置:在数据映射前进行必要的验证,确保数据的有效性和完整性数据转换处理:对于需要转换的数据(如日期格式转换),使用beforeData或onData回调进行处理统一数据格式:保持前后端数据格式的一致性,减少数据转换的复杂度敏感数据处理:对于敏感数据(如密码),应进行适当的加密或脱敏处理

5.3 生命周期回调最佳实践

    清晰的回调逻辑:每个回调函数应具有明确的职责,避免逻辑混乱错误处理全面:在onExecuteError和onError回调中处理所有可能的错误情况资源清理:在afterInvok或afterInvokAction中释放所有占用的资源用户反馈:在适当的回调中提供友好的用户反馈(如提示信息、加载状态)避免阻塞操作:在回调函数中避免执行耗时的阻塞操作,以免影响用户体验

5.4 使用注意事项

    注解作用域:@APIEventAnnotation 只能应用于 Controller 类的方法上,不能应用于类或其他类型的方法事件重复绑定:避免在同一个方法上重复绑定相同的事件,否则可能导致不可预期的行为数据映射冲突:注意避免数据映射路径冲突,确保每个数据字段有唯一的映射路径异步执行注意事项:当queryAsync设置为true时,需注意异步执行可能带来的线程安全问题异常处理:在 API 方法中必须处理所有可能抛出的异常,确保返回统一的 ResultModel 格式

5.5 常用动作枚举类

以下是一些常用的动作枚举类及其说明:

ActionTypeEnum

ButtonActionEnum

MenuActionEnum

TreeActionEnum

这些动作枚举类可以与@APIEventAnnotation结合使用,实现更丰富的事件处理逻辑。例如:

@APIEventAnnotation(    bindFormEvent = CustomFormEvent.SUBMIT,    requestDataSource = "approvalDataSource",    onExecuteSuccessAction = {        @CustomAction(            actionType = ActionTypeEnum.SAVE,            params = {"status", "approved"}        )    })public class ApprovalSubmitEvent {    // 事件处理逻辑}

六、子注解详解

6.1 RequestPathAnnotation

6.2 ResponsePathAnnotation

6.3 AIGCAnnotation

6.4 CustomAction

七、总结

@APIEventAnnotation 是 OneCode 3.0 框架中实现前后端交互的核心注解,通过该注解可以轻松实现事件绑定、数据映射和请求生命周期管理等功能。本手册详细介绍了 @APIEventAnnotation 的所有属性、核心事件枚举以及使用示例,希望能帮助开发者更高效地使用 OneCode 3.0 框架进行企业级应用开发。

通过合理使用 @APIEventAnnotation,开发者可以将传统开发中大量的样板代码和配置工作简化为简洁的注解声明,从而更专注于业务逻辑的实现,提高开发效率和代码质量。在实际开发中,应根据具体业务场景选择合适的属性和事件,遵循最佳实践,以充分发挥 OneCode 3.0 框架的强大功能。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

APIEventAnnotation OneCode 3.0 Java注解 前端交互 事件驱动
相关文章