SpringMVC核心注解@RequestMapping详解

@RequestMapping

  • 作用 :Spring MVC 中用于映射 HTTP 请求到 Controller 类 / 方法的核心注解;
  • 适用范围:可标注在「Controller 类上」(统一前缀)或「方法上」(具体路径)

@ RequestMapping后面跟的是路径 或者属性

@ RequestMapping后面跟的是路径

窄化路径示例:使用二级目录访问(或多级)

java 复制代码
@RequestMapping("/account")
public class AccountControllermethod {
	//指定的请求方式
    @RequestMapping("/findAccount1")
    }
}
//配置的路径就是  /account/findAccount1

向前台传递参数配置

java 复制代码
 /**
 * @RequestMapping 是 Spring MVC 核心注解,用于将 HTTP 请求路径映射到 Controller 方法
 * 底层:HandlerMapping(处理器映射器)会扫描该注解,建立 "/hello" 与 helloWorld() 方法的映射关系
 * 当前端发送 http://域名/项目名/hello 请求时,DispatcherServlet(前端控制器)会通过 HandlerMapping 找到这个方法
 */
@RequestMapping("/hello") 
public ModelAndView helloWorld() {
    /**
     * 1. 创建 ModelAndView 对象:Spring MVC 封装的「模型+视图」载体
     * 底层原因:
     * - Model 部分:存储要传递给视图的业务数据(替代原生 Servlet 的 request.setAttribute())
     * - View 部分:指定要跳转的视图名称(替代原生 Servlet 的 request.getRequestDispatcher() 手动转发)
     * - ModelAndView 是 Controller 与 ViewResolver(视图解析器)之间的约定载体
     */
    ModelAndView modelAndView = new ModelAndView();

    /**
     * 2. 设置模型数据:将业务数据存入 Model 中,供视图渲染使用
     * 底层原因:
     * - addObject() 本质是往 ModelAndView 内部的 Map 集合中添加键值对
     * - 视图渲染阶段(View 组件)会从这个 Map 中取出 "msg" 对应的值,填充到视图(如 JSP)中
     * - 等价于原生 Servlet:request.setAttribute("msg", "一级路径");
     */
    modelAndView.addObject("msg", "一级路径");

    /**
     * 3. 设置视图名称:指定要跳转的视图逻辑名(非物理路径)
     * 底层原因:
     * - "success" 是「逻辑视图名」,不是直接的 JSP 路径,需由 ViewResolver(视图解析器)解析
     * - 视图解析器会根据配置的前缀/后缀拼接成物理路径,例如:
     *   若配置前缀 "/WEB-INF/jsp/"、后缀 ".jsp",则 "success" 会被解析为 "/WEB-INF/jsp/success.jsp"
     * - 替代原生 Servlet:request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response);
     */
    modelAndView.setViewName("success");

    /**
     * 4. 返回 ModelAndView 对象:传递给 HandlerAdapter(处理器适配器),再回传给 DispatcherServlet
     * 底层原因:
     * - DispatcherServlet 接收到 ModelAndView 后,会调用 ViewResolver 解析视图名
     * - 解析出 View 对象后,触发视图渲染(将 Model 中的数据填充到 View 中)
     * - 最终由 DispatcherServlet 将渲染后的视图内容通过 HTTP 响应返回给前端
     */
    return modelAndView;
}

跳转页面

点击a标签就可以跳转了 通过${msg}获取后台的参数

@RequestMapping :method属性

java 复制代码
@Controller
@RequestMapping("/account")
public class AccountController {
	//指定的请求方式
    @RequestMapping(value = "/findAccount1", method = RequestMethod.POST)
    public ModelAndView findAccount1() {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", "欢迎你 springmvc");
        mv.setViewName("success");
        return mv;
    }
}

通过method属性设置多个不同的请求

java 复制代码
  @RequestMapping(value = "/findAccount1",method = {RequestMethod.GET,RequestMethod.POST})
    public ModelAndView findAccount1() {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", "method 方式 ");
        mv.setViewName("success");
        return mv;
    }

通过method属性设置多个不同的请求简写

eg:Post请求

java 复制代码
 @PostMapping("/findAccount2")
== 
@RequestMapping(value = "/findAccount1", method = RequestMethod.POST)

controller方法返回值

controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view

返回ModelAndView

java 复制代码
  public ModelAndView findAccount(){
            ModelAndView mv = new ModelAndView();
            mv.addObject("msg", "ModelAndView ");
            mv.setViewName("success");
            return mv;
        }

2、返回字符串

1)返回视图名

java 复制代码
import org.springframework.ui.Model;   

 @RequestMapping("/findAccount4")
    public String findAccount4(Model model){
        model.addAttribute("msg", "返回视图名");
//=mv.addObject("msg", "ModelAndView ");
        return "success";
    }

2)重定向(①两次请求 ②数据丢失)

java 复制代码
  @RequestMapping("/findAccount7")
        public String findAccount7(Model  model){
            model.addAttribute("msg", "Redirect");
            return "redirect:/account/findAccount8";
        }
        @RequestMapping("/findAccount8")
        public String findAccount8(Model model){
//            model.addAttribute("msg", "重定向");
            return "success";//重定向数据丢失
        }

3)转发(①一次请求 ②数据不丢失)

java 复制代码
  @RequestMapping("/findAccount5")
    public String findAccount5(Model model){
        model.addAttribute("msg", "转发");
        return "forward:/account/findAccount6";
    }
    @RequestMapping("/findAccount6")
    public String findAccount6(Model  model){
        //转发结果被覆盖  msg = Forward
        model.addAttribute("msg", "好人");
        return "success";
    }

参数接收(jsp---参数---->controller)

接收多个基本类型

方法一参数名要与传递的key保持一致

java 复制代码
 @RequestMapping("/findAccount9")
    public  String findAccount9(String name, String age, Model model){
        model.addAttribute("msg", name+" "+age);
        return "success";
    }

方法二通过注解绑定key值

java 复制代码
  @RequestMapping("/findAccount10")
    public  String findAccount10(@RequestParam("name") String sb, @RequestParam("age")String wc, Model model){
        model.addAttribute("msg", sb+" "+wc);
        return "success";
    }

接收多个参数

创建一个对象吧内容存到对象里面

java 复制代码
import com.yunkukukukuku.pojo.Account; 
  @RequestMapping("/findAccount11")
    public  String findAccount11(Model model, Account  account){
        model.addAttribute("msg",account);
        return "success";
    }

restful风格URL

RESTful 是一种URL 设计规范(不是技术,是风格),核心是:

  • URL 只描述「资源」,不包含「操作」;
  • 操作(增删改查)通过 HTTP 请求方法(GET/POST/PUT/DELETE)体现;
  • 资源层级用「/」分隔,路径参数用「{变量}」表示,无后缀(如 .jsp/.do)。
传统 URL(非 RESTful) RESTful URL + HTTP 方法 含义
/user/findById?id=1 GET /user/1 查询 ID=1 的用户
/user/addUser POST /user 添加用户
/user/updateUser?id=1 PUT /user/1 修改 ID=1 的用户
/user/deleteUser?id=1 DELETE /user/1 删除 ID=1 的用户
  • 资源名用名词复数 (如 /users 而非 /user),表示一类资源;
  • URL 全小写,用 - 分隔多单词(如 /user-info 而非 /userInfo);
  • 无动词(如 find/add/update),无后缀(如 .do/.action);
  • 层级清晰:/users/1/orders 表示 ID=1 的用户的所有订单。
HTTP 方法 操作 幂等性(重复请求结果一致) 示例 URL
GET 查询(查) GET /users/1
POST 新增(增) POST /users
PUT 全量修改(改) PUT /users/1
PATCH 部分修改(改) PATCH /users/1
DELETE 删除(删) DELETE /users/1

eg

java 复制代码
  @RequestMapping("findAccount12/{name}/{age}")
    public  String findAccount12(@PathVariable String name, @PathVariable String age, Model model){
        model.addAttribute("msg",name+" "+age);
        return "success";
    }
    @RequestMapping("findAccount13/{name}/{20}")
    public  String findAccount13(@PathVariable("name") String sb, @PathVariable("age") String wc, Model model){
        model.addAttribute("msg",sb+" "+wc);
        return "success";
    }
相关推荐
小旭95272 小时前
Spring MVC :从入门到精通(上)
java·后端·spring·mvc·intellij-idea
阿杜杜不是阿木木2 小时前
从0到1构建像Claude Code那样的Agent(三):行动前先计划
java·服务器·windows·agent·ai编程·claudecode
StackNoOverflow2 小时前
Spring MVC核心知识点快速梳理
java·spring·mvc
步步为营DotNet2 小时前
使用.NET 11的Native AOT提升应用性能
java·前端·.net
jing-ya2 小时前
day 54 图论part6
java·开发语言·数据结构·算法·图论
深念Y2 小时前
Java并发集合:原理与使用场景速查
java·开发语言
恼书:-(空寄2 小时前
Spring Boot 实现事件监听(监听器+自定义事件)完整指南
java·spring boot·后端
我真会写代码2 小时前
深入解析Java ArrayList与HashMap扩容机制:原理、差异与实战避坑
java·数据结构·算法·集合
代码探秘者2 小时前
【大模型应用】3.分块入门
java·后端·python·spring