Files
cool-admin-java-docs/.vitepress/dist/src/guide/controller.html
T
2025-04-13 10:47:33 +08:00

144 lines
83 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>控制器 | Cool Admin</title>
<meta name="description" content="一个很酷的后台管理系统开发框架">
<meta name="generator" content="VitePress v1.6.3">
<link rel="preload stylesheet" href="/assets/style.BaGxxT1-.css" as="style">
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
<script type="module" src="/assets/app.DesQjko7.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.BAM3wGj3.js">
<link rel="modulepreload" href="/assets/chunks/framework.BjhQB2K5.js">
<link rel="modulepreload" href="/assets/src_guide_controller.md.ChJ_NED0.lean.js">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-96d1ba1f data-v-fbfa64bf><!--[--><!--]--><!--[--><span tabindex="-1" data-v-5d3e946a></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-5d3e946a>Skip to content</a><!--]--><!----><header class="VPNav" data-v-fbfa64bf data-v-1f7b0f5c><div class="VPNavBar has-sidebar top" data-v-1f7b0f5c data-v-511c2cc9><div class="wrapper" data-v-511c2cc9><div class="container" data-v-511c2cc9><div class="title" data-v-511c2cc9><div class="VPNavBarTitle has-sidebar" data-v-511c2cc9 data-v-211643ab><a class="title" href="/" data-v-211643ab><!--[--><!--]--><!--[--><img class="VPImage logo" src="/logo.png" alt data-v-4d0b3a1f><!--]--><span data-v-211643ab>Cool Admin</span><!--[--><!--]--></a></div></div><div class="content" data-v-511c2cc9><div class="content-body" data-v-511c2cc9><!--[--><!--]--><div class="VPNavBarSearch search" data-v-511c2cc9><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-511c2cc9 data-v-d53bf4df><span id="main-nav-aria-label" class="visually-hidden" data-v-d53bf4df> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/src/introduce/index.html" tabindex="0" data-v-d53bf4df data-v-bbf7f74d><!--[--><span data-v-bbf7f74d>介绍</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/src/guide/quick.html" tabindex="0" data-v-d53bf4df data-v-bbf7f74d><!--[--><span data-v-bbf7f74d>教程</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://cool-js.com/plugin" target="_blank" rel="noreferrer" tabindex="0" data-v-d53bf4df data-v-bbf7f74d><!--[--><span data-v-bbf7f74d>🔥插件市场</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/src/about/index.html" tabindex="0" data-v-d53bf4df data-v-bbf7f74d><!--[--><span data-v-bbf7f74d>交流合作</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-d53bf4df data-v-95325d79><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-95325d79><span class="text" data-v-95325d79><!----><span data-v-95325d79>v7.1.0</span><span class="vpi-chevron-down text-icon" data-v-95325d79></span></span></button><div class="menu" data-v-95325d79><div class="VPMenu" data-v-95325d79 data-v-3e022afb><div class="items" data-v-3e022afb><!--[--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link" href="/src/todo/update.html" data-v-acee1e57><!--[--><span data-v-acee1e57>更新日志</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link" href="/src/todo/plan.html" data-v-acee1e57><!--[--><span data-v-acee1e57>版本计划</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-d53bf4df data-v-95325d79><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-95325d79><span class="text" data-v-95325d79><!----><span data-v-95325d79>更多</span><span class="vpi-chevron-down text-icon" data-v-95325d79></span></span></button><div class="menu" data-v-95325d79><div class="VPMenu" data-v-95325d79 data-v-3e022afb><div class="items" data-v-3e022afb><!--[--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link vp-external-link-icon" href="https://cool-js.com" target="_blank" rel="noreferrer" data-v-acee1e57><!--[--><span data-v-acee1e57>Cool 官网</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link vp-external-link-icon" href="https://node.cool-admin.com" target="_blank" rel="noreferrer" data-v-acee1e57><!--[--><span data-v-acee1e57>Cool Admin(Nodejs版)</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link vp-external-link-icon" href="https://node.cool-js.com" target="_blank" rel="noreferrer" data-v-acee1e57><!--[--><span data-v-acee1e57>Cool Admin Vue(前端)</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link vp-external-link-icon" href="https://uni-docs.cool-js.com" target="_blank" rel="noreferrer" data-v-acee1e57><!--[--><span data-v-acee1e57>Uni(基于uni-app跨端移动端开发)</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-511c2cc9 data-v-764c0058><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="切换到深色模式" aria-checked="false" data-v-764c0058 data-v-ae950ac5 data-v-4ec3b2fe><span class="check" data-v-4ec3b2fe><span class="icon" data-v-4ec3b2fe><!--[--><span class="vpi-sun sun" data-v-ae950ac5></span><span class="vpi-moon moon" data-v-ae950ac5></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-511c2cc9 data-v-d6e28fe5 data-v-c9b9e435><!--[--><a class="VPSocialLink no-icon" href="https://github.com/cool-team-official/cool-admin-java" aria-label="github" target="_blank" rel="noopener" data-v-c9b9e435 data-v-71029e87><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-511c2cc9 data-v-cc85dc96 data-v-95325d79><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-95325d79><span class="vpi-more-horizontal icon" data-v-95325d79></span></button><div class="menu" data-v-95325d79><div class="VPMenu" data-v-95325d79 data-v-3e022afb><!----><!--[--><!--[--><!----><div class="group" data-v-cc85dc96><div class="item appearance" data-v-cc85dc96><p class="label" data-v-cc85dc96>主题</p><div class="appearance-action" data-v-cc85dc96><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="切换到深色模式" aria-checked="false" data-v-cc85dc96 data-v-ae950ac5 data-v-4ec3b2fe><span class="check" data-v-4ec3b2fe><span class="icon" data-v-4ec3b2fe><!--[--><span class="vpi-sun sun" data-v-ae950ac5></span><span class="vpi-moon moon" data-v-ae950ac5></span><!--]--></span></span></button></div></div></div><div class="group" data-v-cc85dc96><div class="item social-links" data-v-cc85dc96><div class="VPSocialLinks social-links-list" data-v-cc85dc96 data-v-c9b9e435><!--[--><a class="VPSocialLink no-icon" href="https://github.com/cool-team-official/cool-admin-java" aria-label="github" target="_blank" rel="noopener" data-v-c9b9e435 data-v-71029e87><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-511c2cc9 data-v-e08ccaba><span class="container" data-v-e08ccaba><span class="top" data-v-e08ccaba></span><span class="middle" data-v-e08ccaba></span><span class="bottom" data-v-e08ccaba></span></span></button></div></div></div></div><div class="divider" data-v-511c2cc9><div class="divider-line" data-v-511c2cc9></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-fbfa64bf data-v-3eeb2970><div class="container" data-v-3eeb2970><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-3eeb2970><span class="vpi-align-left menu-icon" data-v-3eeb2970></span><span class="menu-text" data-v-3eeb2970>菜单</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-3eeb2970 data-v-bd1fb31f><button data-v-bd1fb31f>回到顶部</button><!----></div></div></div><aside class="VPSidebar" data-v-fbfa64bf data-v-130e406e><div class="curtain" data-v-130e406e></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-130e406e><span class="visually-hidden" id="sidebar-aria-label" data-v-130e406e> Sidebar Navigation </span><!--[--><!--[--><div class="ad" data-v-96d1ba1f><!--[--><!--]--></div><!--]--><!--]--><!--[--><div class="no-transition group" data-v-7eb7a422><section class="VPSidebarItem level-0" data-v-7eb7a422 data-v-6092ddf2><div class="item" role="button" tabindex="0" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><h2 class="text" data-v-6092ddf2>介绍</h2><!----></div><div class="items" data-v-6092ddf2><!--[--><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/introduce/index.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>简介</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/introduce/show.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>演示</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/introduce/src.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>源码</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-7eb7a422><section class="VPSidebarItem level-0 has-active" data-v-7eb7a422 data-v-6092ddf2><div class="item" role="button" tabindex="0" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><h2 class="text" data-v-6092ddf2>教程</h2><!----></div><div class="items" data-v-6092ddf2><!--[--><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/quick.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>快速开始</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/dir.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>目录结构</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/ai.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>Ai编码</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/flow.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>Ai流程编排</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/plugin.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>扩展插件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/dev.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>开发方式</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1 has-active" data-v-6092ddf2 data-v-6092ddf2><div class="item" role="button" tabindex="0" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><h3 class="text" data-v-6092ddf2>核心</h3><!----></div><div class="items" data-v-6092ddf2><!--[--><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/controller.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>控制器(controller)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/service.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>服务(service)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/db.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>数据库(db)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/cache.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>缓存(cache)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/upload.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>文件上传(file)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/exception.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>统一异常(exception)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/security.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>权限校验(security)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/initData.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>数据初始化(init)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/uniqueIDGen.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>分布式ID(id)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/lock.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>锁(lock)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/noRepeatSubmit.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>防重提交(submit)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/recordLog.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>请求日志(log)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/swagger.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>接口文档(swagger)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/tenant.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>多租户(tenant)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/i18n.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>国际化多语言(i18n)</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/deploy.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>部署项目</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-7eb7a422><section class="VPSidebarItem level-0" data-v-7eb7a422 data-v-6092ddf2><div class="item" role="button" tabindex="0" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><h2 class="text" data-v-6092ddf2>计划&更新</h2><!----></div><div class="items" data-v-6092ddf2><!--[--><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/todo/update.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>更新</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/todo/plan.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>计划</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-7eb7a422><section class="VPSidebarItem level-0" data-v-7eb7a422 data-v-6092ddf2><!----><div class="items" data-v-6092ddf2><!--[--><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/question/common.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>常见问题</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/about/index.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>交流合作</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-fbfa64bf data-v-8d143afd><div class="VPDoc has-sidebar has-aside" data-v-8d143afd data-v-4d316cbc><!--[--><!--]--><div class="container" data-v-4d316cbc><div class="aside" data-v-4d316cbc><div class="aside-curtain" data-v-4d316cbc></div><div class="aside-container" data-v-4d316cbc><div class="aside-content" data-v-4d316cbc><div class="VPDocAside" data-v-4d316cbc data-v-c4200bf2><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-c4200bf2 data-v-beb6bc9f><div class="content" data-v-beb6bc9f><div class="outline-marker" data-v-beb6bc9f></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-beb6bc9f>页面导航</div><ul class="VPDocOutlineItem root" data-v-beb6bc9f data-v-c8fd7940><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-c4200bf2></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-4d316cbc><div class="content-container" data-v-4d316cbc><!--[--><!--]--><main class="main" data-v-4d316cbc><div style="position:relative;" class="vp-doc _src_guide_controller" data-v-4d316cbc><div><h1 id="控制器" tabindex="-1">控制器 <a class="header-anchor" href="#控制器" aria-label="Permalink to &quot;控制器&quot;">​</a></h1><p>所有的 controller 都继承自 BaseController,该父类已经实现了以下六个基础方法:add、delete、update、page、list、info,可以大大简化代码,使得 controller 更加简洁。</p><h2 id="示例" tabindex="-1">示例 <a class="header-anchor" href="#示例" aria-label="Permalink to &quot;示例&quot;">​</a></h2><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Tag</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;测试CURD&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">description</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;测试CURD&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">CoolRestController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">value</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;/cool&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">api</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;add&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;delete&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;update&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;page&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;list&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;info&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> AdminDemoInfoController</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> extends</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> BaseController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoService</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt; {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Override</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> protected</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> init</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(HttpServletRequest </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">request</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, JSONObject </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">requestParams</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 可以在这边实现一下列表数据排序规则,查询条件过滤,返回哪些字段等</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>这样就默认实现了以下六个接口:</p><ul><li>POST 新增</li><li>POST 删除</li><li>POST 修改</li><li>POST 分页查询</li><li>POST 查询列表</li><li>GET 根据列表查询单个信息 等 6 个接口</li></ul><h2 id="查询配置" tabindex="-1">查询配置 <a class="header-anchor" href="#查询配置" aria-label="Permalink to &quot;查询配置&quot;">​</a></h2><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Tag</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;测试CURD&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">description</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;测试CURD&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">CoolRestController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">value</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;/cool&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">api</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;add&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;delete&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;update&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;page&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;list&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;info&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> AdminDemoInfoController</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> extends</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> BaseController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoService</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt; {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Override</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> protected</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> init</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(HttpServletRequest </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">request</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, JSONObject </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">requestParams</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> setPageOption</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">createOp</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">() </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 分页查询配置</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">fieldEq</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;status&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 字段全匹配,对应请求参数中同名参数</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">keyWordLikeFields</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;name&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;phone&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 需要模糊查询的字段,对应请求参数中的 keyWord</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">select</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;name&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;phone&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;age&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 返回字段</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">queryWrapper</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(QueryWrapper.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">create</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">())); </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 其他查询方式 具体看 https://mybatis-flex.com/zh/base/querywrapper.html文档</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> setListOption</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">createOp</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()); </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 列表查询 跟分页查询一样</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>以上是针对Entity单表查询方式,如果我们有需要连表查询,查询另一张表的字段,这样就需要在Entity加上另一张表的的字段,针对这种场景,我们可以使用 自定义的查询方式</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> AppMarketCouponUserController</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> extends</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> BaseController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">MarketCouponUserService</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">MarketCouponUserEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt; {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> protected</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> init</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(HttpServletRequest </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">request</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, JSONObject </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">requestParams</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> setPageOption</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> createOp</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">select</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(MARKET_COUPON_INFO_ENTITY.ALL_COLUMNS,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> MARKET_COUPON_USER_ENTITY.STATUS.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">as</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;useStatus&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 查询连表字段</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">queryWrapper</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> QueryWrapper.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">create</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">from</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(MARKET_COUPON_USER_ENTITY)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">leftJoin</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(MARKET_COUPON_INFO_ENTITY) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// leftJoin 连表查询</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">on</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(MARKET_COUPON_USER_ENTITY.USER_ID.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">eq</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> CoolSecurityUtil.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getCurrentUserId</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">())</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">and</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(MARKET_COUPON_USER_ENTITY.COUPON_ID.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">eq</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> MARKET_COUPON_INFO_ENTITY.ID))))</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">queryModeEnum</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(QueryModeEnum.CUSTOM) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 自定义查询模式,默认为ENTITY 实体,自定义场景主要使用在关联表查询插件,</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 需要返回的字段分布在各个表里,需要组装数据,通过这种方式,就不需要在entity 中加非存储数据库的字段;默认转成map,注意如果该表有json字段,</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 需要通过下面的 transform 手动进行转换</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">asType</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(Map.class) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 默认为Map,也可以自己定义VO</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">transform</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(o </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Map map </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (Map) o; </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 没有设置asType ,自定义类型默认为 map</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (ObjUtil.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">isNotEmpty</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(map.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">get</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;condition&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">))) {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> map.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">put</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;condition&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> JSONUtil.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">toBean</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(map.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">get</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;condition&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">toString</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(), Map.class));</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> })); </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 其他查询方式 具体看 https://mybatis-flex.com/zh/base/querywrapper.html文档</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>查询模式queryModeEnum 还有 ENTITY_WITH_RELATIONS, 实体中 使用了关联查询 @RelationOneToMany 如下面这个订单查询,订单产品列表也一并查出</p><p>关联查询用法参考:<a href="https://mybatis-flex.com/zh/base/relations-query.html" target="_blank" rel="noreferrer">https://mybatis-flex.com/zh/base/relations-query.html</a></p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Getter</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Setter</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Table</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">value</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;order_info&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">comment</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;订单信息&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> OrderInfoEntity</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> extends</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> BaseEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">OrderInfoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt; {</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Index</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">ColumnDefine</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">comment</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;用户ID&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">notNull</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> private</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Long userId;</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // ......</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 订单商品列表</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Ignore</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Column</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">ignore</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">RelationOneToMany</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">selfField</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;id&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">targetField</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;orderId&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> private</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> List&lt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">OrderGoodsEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt; goodsList;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="请求参数" tabindex="-1">请求参数 <a class="header-anchor" href="#请求参数" aria-label="Permalink to &quot;请求参数&quot;">​</a></h2><p>为了方便获取参数,框架封装了一个请求属性,将 URL、表单、body</p><p>等参数封装在了一个 JSONObject requestParams,开发者可以从中方便的获取各种参数;</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Tag</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;测试CURD&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">description</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;测试CURD&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">CoolRestController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">value</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;/cool&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">api</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;add&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;delete&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;update&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;page&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;list&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;info&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> AdminDemoInfoController</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> extends</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> BaseController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoService</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt; {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Override</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> protected</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> init</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(HttpServletRequest </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">request</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, JSONObject </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">requestParams</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 可以在这边实现一下列表数据排序规则,查询条件过滤,返回哪些字段等</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">PostMapping</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;/test&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> public</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> R </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">test</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">RequestAttribute</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> JSONObject </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">requestparams</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, String </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> System.out.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">println</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(requestparams.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getStr</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;user&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">));</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> R.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ok</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="重写实现" tabindex="-1">重写实现 <a class="header-anchor" href="#重写实现" aria-label="Permalink to &quot;重写实现&quot;">​</a></h2><p>默认实现了通用的六个接口方法,如果不满足需求,可以在对应的 service 中重写方法。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Tag</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;测试CURD&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">description</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;测试CURD&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">CoolRestController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">value</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;/cool&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">api</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;add&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;delete&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;update&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;page&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;list&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;info&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> AdminDemoInfoController</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> extends</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> BaseController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoService</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt; {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Override</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> protected</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> init</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(HttpServletRequest </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">request</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, JSONObject </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">requestParams</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 可以在这边实现一下列表数据排序规则,查询条件过滤,返回哪些字段等</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Override</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">PostMapping</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;/page&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> protected</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> R </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">page</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(JSONObject </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">requestParams</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, CrudOption&lt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt; </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 重写逻辑</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> super</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">page</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(requestParams, option);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>同样也可以对 service 进行重写</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Service</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> DemoServiceImpl</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> extends</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> BaseServiceImpl</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoMapper</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt; </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">implements</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> DemoService</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Override</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> public</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Object </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">page</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(JSONObject </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">requestParams</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, Page&lt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt; </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">page</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, QueryWrapper&lt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt; </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">queryWrapper</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 重写逻辑</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> super</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">page</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(requestParams, page, queryWrapper);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>和传统的 controller 对比一下是简化了不少,接下来我们看看实现的原理</p><h1 id="原理" tabindex="-1">原理 <a class="header-anchor" href="#原理" aria-label="Permalink to &quot;原理&quot;">​</a></h1><h2 id="接口路由规则" tabindex="-1">接口路由规则 <a class="header-anchor" href="#接口路由规则" aria-label="Permalink to &quot;接口路由规则&quot;">​</a></h2><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>// 模块目录</span></span>
<span class="line"><span>├── modules</span></span>
<span class="line"><span>│ └── demo(模块名)</span></span>
<span class="line"><span>│ │ └── controller(接口)</span></span>
<span class="line"><span>│ │ │ └── admin(后端接口)</span></span>
<span class="line"><span>│ │ │ │ └── AdminDemoInfoController.java</span></span>
<span class="line"><span>│ │ │ └── app(前端接口)</span></span>
<span class="line"><span>│ │ │ │ └── AppDemoInfoController.java</span></span></code></pre></div><ul><li>生成的路由前缀为: /admin/demo/info/xxx 与/app/demo/info/xxx</li><li>规则为: admin(app)/模块名/AdminDemoInfoController 转成小写替换掉 admin(app)、模块名和 controller 如果在 AdminDemoInfoController.java 同级下有个 AdminDemoUserInfoController.java文件</li></ul><p>该接口解析的前缀则是 /admin/demo/user/info/xxx</p><div class="warning custom-block"><p class="custom-block-title">注意</p><p>这个解析规则在 v7.1.3(2024-08-25) 版本才有,在历史版本中需在 admin 包下加一级 user 包,否则这个controller eps识别不了</p></div><h2 id="自定义路由注解" tabindex="-1">自定义路由注解 <a class="header-anchor" href="#自定义路由注解" aria-label="Permalink to &quot;自定义路由注解&quot;">​</a></h2><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">interface</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> CoolRestController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">AliasFor</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">annotation</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> RequestMapping.class)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> String </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">default</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">AliasFor</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">annotation</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> RequestMapping.class)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[] </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">value</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {};</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[] </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">api</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {};</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="重写-getmappingformethod" tabindex="-1">重写 getMappingForMethod <a class="header-anchor" href="#重写-getmappingformethod" aria-label="Permalink to &quot;重写 getMappingForMethod&quot;">​</a></h2><p>我们不直接使用 spring 自带的注解,而是对它做一层封装,controller 上加了这个注解后</p><p>将由以下这个类实现自动配置模块路由,该类继承了 spring 的 RequestMappingHandlerMapping,并重写了 getMappingForMethod 方法</p><p>根据一定规则生成 path,返回给 spring 做解析。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> AutoPrefixUrlMapping</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> extends</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> RequestMappingHandlerMapping</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Override</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> protected</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> RequestMappingInfo </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getMappingForMethod</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(Method </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">method</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, Class&lt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">?</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt; </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">handlerType</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> CoolRestController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[] annotations </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> handlerType.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getAnnotationsByType</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(CoolRestController.class);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> RequestMappingInfo info </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> super</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getMappingForMethod</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(method, handlerType);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // ... 按规则组装 path</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> info </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> info.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">mutate</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">().</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">paths</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(path).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">build</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">().</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">combine</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(info);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> info;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></div></div></main><footer class="VPDocFooter" data-v-4d316cbc data-v-35768638><!--[--><!--]--><div class="edit-info" data-v-35768638><div class="edit-link" data-v-35768638><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/cool-team-official/cool-admin-java-docs/blob/main/src/guide/controller.md" target="_blank" rel="noreferrer" data-v-35768638><!--[--><span class="vpi-square-pen edit-link-icon" data-v-35768638></span> 在GitHub上编辑<!--]--></a></div><div class="last-updated" data-v-35768638><p class="VPLastUpdated" data-v-35768638 data-v-32a58613>最后更新于: <time datetime="2024-09-08T13:41:34.000Z" data-v-32a58613></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-35768638><span class="visually-hidden" id="doc-footer-aria-label" data-v-35768638>Pager</span><div class="pager" data-v-35768638><a class="VPLink link pager-link prev" href="/src/guide/dev.html" data-v-35768638><!--[--><span class="desc" data-v-35768638>上一页</span><span class="title" data-v-35768638>开发方式</span><!--]--></a></div><div class="pager" data-v-35768638><a class="VPLink link pager-link next" href="/src/guide/service.html" data-v-35768638><!--[--><span class="desc" data-v-35768638>下一页</span><span class="title" data-v-35768638>服务(service)</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-fbfa64bf data-v-45624e61><div class="container" data-v-45624e61><p class="message" data-v-45624e61>COOL为开发者而生</p><p class="copyright" data-v-45624e61><a href="https://beian.miit.gov.cn">Copyright © COOL | 闽ICP备2024042701号</a></p></div></footer><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"index.md\":\"Dsd7aigo\",\"readme.md\":\"Rd2D_BZq\",\"src_about_index.md\":\"-unb0L2u\",\"src_guide_ai.md\":\"aIl2n3N7\",\"src_guide_cache.md\":\"DYexoE7d\",\"src_guide_controller.md\":\"ChJ_NED0\",\"src_guide_db.md\":\"CH-r16iF\",\"src_guide_deploy.md\":\"CVc1dXEU\",\"src_guide_dev.md\":\"DM1UjwvK\",\"src_guide_dir.md\":\"Bywk12Mo\",\"src_guide_exception.md\":\"1HCd76m1\",\"src_guide_flow.md\":\"DMDsOCkF\",\"src_guide_i18n.md\":\"D4ikqxxm\",\"src_guide_initdata.md\":\"BhdPvNop\",\"src_guide_lock.md\":\"C8JTDlsP\",\"src_guide_norepeatsubmit.md\":\"CvFjLc1r\",\"src_guide_plugin.md\":\"DSQp6REO\",\"src_guide_quick.md\":\"g_DIbvkh\",\"src_guide_recordlog.md\":\"B0w4IZH7\",\"src_guide_security.md\":\"BFmZQZP9\",\"src_guide_service.md\":\"CokY9neI\",\"src_guide_swagger.md\":\"CCfA6TBH\",\"src_guide_tenant.md\":\"CP_z92JB\",\"src_guide_uniqueidgen.md\":\"BNiKKfQz\",\"src_guide_upload.md\":\"D-dQqFKU\",\"src_introduce_index.md\":\"BaUz4Xtw\",\"src_introduce_show.md\":\"Ck0DuCIX\",\"src_introduce_src.md\":\"UlNmfnNt\",\"src_question_common.md\":\"Caojqqth\",\"src_todo_plan.md\":\"pGnBM6_r\",\"src_todo_update.md\":\"DUbMUQW8\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Cool Admin\",\"description\":\"一个很酷的后台管理系统开发框架\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/logo.png\",\"search\":{\"provider\":\"local\"},\"footer\":{\"message\":\"COOL为开发者而生\",\"copyright\":\"<a href=\\\"https://beian.miit.gov.cn\\\">Copyright © COOL | 闽ICP备2024042701号</a>\"},\"docFooter\":{\"prev\":\"上一页\",\"next\":\"下一页\"},\"outline\":{\"label\":\"页面导航\",\"level\":[2,3]},\"lastUpdated\":{\"text\":\"最后更新于\",\"formatOptions\":{\"dateStyle\":\"short\",\"timeStyle\":\"medium\"}},\"langMenuLabel\":\"多语言\",\"returnToTopLabel\":\"回到顶部\",\"sidebarMenuLabel\":\"菜单\",\"darkModeSwitchLabel\":\"主题\",\"lightModeSwitchTitle\":\"切换到浅色模式\",\"darkModeSwitchTitle\":\"切换到深色模式\",\"editLink\":{\"text\":\"在GitHub上编辑\",\"pattern\":\"https://github.com/cool-team-official/cool-admin-java-docs/blob/main/:path\"},\"nav\":[{\"text\":\"介绍\",\"link\":\"/src/introduce/index.md\",\"noIcon\":false},{\"text\":\"教程\",\"link\":\"/src/guide/quick.md\"},{\"text\":\"🔥插件市场\",\"link\":\"https://cool-js.com/plugin\"},{\"text\":\"交流合作\",\"link\":\"/src/about/index.md\"},{\"text\":\"v7.1.0\",\"items\":[{\"text\":\"更新日志\",\"link\":\"/src/todo/update.md\"},{\"text\":\"版本计划\",\"link\":\"/src/todo/plan.md\"}]},{\"text\":\"更多\",\"items\":[{\"text\":\"Cool 官网\",\"link\":\"https://cool-js.com\"},{\"text\":\"Cool Admin(Nodejs版)\",\"link\":\"https://node.cool-admin.com\"},{\"text\":\"Cool Admin Vue(前端)\",\"link\":\"https://node.cool-js.com\"},{\"text\":\"Uni(基于uni-app跨端移动端开发)\",\"link\":\"https://uni-docs.cool-js.com\"}]}],\"sidebar\":[{\"text\":\"介绍\",\"items\":[{\"text\":\"简介\",\"link\":\"/src/introduce/index.md\"},{\"text\":\"演示\",\"link\":\"/src/introduce/show.md\"},{\"text\":\"源码\",\"link\":\"/src/introduce/src.md\"}]},{\"text\":\"教程\",\"items\":[{\"text\":\"快速开始\",\"link\":\"/src/guide/quick.md\"},{\"text\":\"目录结构\",\"link\":\"/src/guide/dir.md\"},{\"text\":\"Ai编码\",\"link\":\"/src/guide/ai.md\"},{\"text\":\"Ai流程编排\",\"link\":\"/src/guide/flow.md\"},{\"text\":\"扩展插件\",\"link\":\"/src/guide/plugin.md\"},{\"text\":\"开发方式\",\"link\":\"/src/guide/dev.md\"},{\"text\":\"核心\",\"items\":[{\"text\":\"控制器(controller)\",\"link\":\"/src/guide/controller.md\"},{\"text\":\"服务(service)\",\"link\":\"/src/guide/service.md\"},{\"text\":\"数据库(db)\",\"link\":\"/src/guide/db.md\"},{\"text\":\"缓存(cache)\",\"link\":\"/src/guide/cache.md\"},{\"text\":\"文件上传(file)\",\"link\":\"/src/guide/upload.md\"},{\"text\":\"统一异常(exception)\",\"link\":\"/src/guide/exception.md\"},{\"text\":\"权限校验(security)\",\"link\":\"/src/guide/security.md\"},{\"text\":\"数据初始化(init)\",\"link\":\"/src/guide/initData.md\"},{\"text\":\"分布式ID(id)\",\"link\":\"/src/guide/uniqueIDGen.md\"},{\"text\":\"锁(lock)\",\"link\":\"/src/guide/lock.md\"},{\"text\":\"防重提交(submit)\",\"link\":\"/src/guide/noRepeatSubmit.md\"},{\"text\":\"请求日志(log)\",\"link\":\"/src/guide/recordLog.md\"},{\"text\":\"接口文档(swagger)\",\"link\":\"/src/guide/swagger.md\"},{\"text\":\"多租户(tenant)\",\"link\":\"/src/guide/tenant.md\"},{\"text\":\"国际化多语言(i18n)\",\"link\":\"/src/guide/i18n.md\"}]},{\"text\":\"部署项目\",\"link\":\"/src/guide/deploy.md\"}]},{\"text\":\"计划&更新\",\"items\":[{\"text\":\"更新\",\"link\":\"/src/todo/update.md\"},{\"text\":\"计划\",\"link\":\"/src/todo/plan.md\"}]},{\"text\":\"常见问题\",\"link\":\"/src/question/common.md\"},{\"text\":\"交流合作\",\"link\":\"/src/about/index.md\"}],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/cool-team-official/cool-admin-java\"}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
</body>
</html>