企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## 命名规范 >[warning] 控制器的类名首字母必须为大写,统一命名为:**控制器名+Controller** >[warning] @Controller注解的value值统一为:**应用名.控制器类名** > 这样做的目的是为了解决多个应用下,类名重名直接使用@Controller会报错的问题 >[warning] @RequestMapping注解的value值统一为: > 1、类注解为 **/应用名/控制器名(小写)** > 2、方法注解为 **/方法名(小写)** > 这样做的目的是为了规范,方便根据url反查到控制器以及方法 ``` package cn.lcfms.app.admin.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import cn.lcfms.app.BaseController; @Controller("index.TestController") @RequestMapping("/index/test") public class TestController extends BaseController{ @RequestMapping("/name") public void name() { } } ``` ## 继承 1. 一般的控制器可以继承控制器基类**cn.lcfms.app.BaseController**,该类提供两个核心方法,如下,**beforeProtected**方法将在控制器执行前被调用,**afterProtected**方法将在控制器执行后被调用。 ``` protected void beforeProtected(HttpServletRequest request,HttpServletResponse response){...} protected void afterProtected(HttpServletRequest request,HttpServletResponse response,ModelAndView view) throws IOException{...} ``` 2. 可以在子类中重写**beforeProtected**方法与**afterProtected**方法,重写之后将自动执行子类的方法,建议重写后使用super首先执行父类的方法,如下: ``` @Override protected void beforeProtected(HttpServletRequest request, HttpServletResponse response) { super.beforeProtected(request, response); //...你需要在控制器被调用前执行的操作 } @Override protected void afterProtected(HttpServletRequest request,HttpServletResponse response,ModelAndView view) throws IOException { super.afterProtected(request, response, view); //...你需要在控制器被调用后执行的操作 } ``` 3. 如果是使用后台管理界面的应用,也可以继承**cn.lcfms.app.admin.controller.AdminBaseController**,继承了该类的控制器可以使用通用视图模板, [查看详细](通用视图模板.md) ## 控制器返回值 ### 返回jsp视图 >[info] 遵循SpringMvc规范,返回ModelAndView对象或jsp的文件名字符串 ``` @RequestMapping("/name") public ModelAndView name() { return new ModelAndView("test"); } 或者 @RequestMapping("/name") public String name() { return "test"; } ``` ### 返回json字符串 >[info] 为了使书写简便,继承了BaseController的控制器支持直接返回json字符串,不需要写@ResponseBody注解,系统将自动识别json格式的字符串 ``` @RequestMapping("/name") public String name() { return "{\"code\":1}"; } 或者将内部的双引号去掉 @RequestMapping("/name") public String name() { return "{code:1}"; } ``` ### 返回xml字符串 >[info] 为了使书写简便,继承了BaseController的控制器支持直接返回jxml字符串,不需要写@ResponseBody注解,系统将自动识别xml格式的字符串 ``` @RequestMapping("/name") public String name() { return "<xml ... >"; } ```