@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";
}
