一、@Controller:标记类
-
核心作用:标记一个类为 SpringMVC 控制器,接受客户端请求,调用业务逻辑,返回响应数据
-
核心特点
-
是组件注解,Spring 会自动扫描并实例化该类
-
默认行为:方法中返回的字符串会被当做逻辑地址,Spring 会去响应的目录下找到对应的 .html 文件渲染
代码示例
@Controller
public class PageController {
@RequestMapping
public String page2 (Map<String, Object> map) {
map.put("name", "张三");
return "page2";
}
}
二、@RequestMapping
-
核心作用:建立 URL 请求路径与类/方法的映射关系,同时可指定请求方法、参数、请求头等过滤条件
-
核心属性
-
value/path:映射的 URL 路径
-
method:指定请求的方法(GET/POST/PUT/DELETE),是个集合可以存在多个请求方式
-
params(拓展):请求必须包含的参数
-
代码示例
@Controller
@RequestMapping("/page") // 类级父路径:/user
public class PageController {
//// 方法级子路径:/page2 请求方式:GET,POST
@RequestMapping(value="/page2", method={RequestMethod.GET,RequestMethod.POST})
public String page2 (Map<String, Object> map) {
map.put("name", "张三");
return "page2";
}
}
-
同时每个请求方式可以单独取出使用
@GetMapping@PostMapping @PutMapping @DeleteMapping
三、RequestParam
-
核心作用:从请求的查询参数(URL?username=xxx)或表单参数中获取值,绑定到方法参数上
-
核心参数(扩展)
|
|
|
| 属性 |
作用 |
默认值 |
| value/name |
前端传递的参数名(与请求参数名一致) |
方法参数名(若参数名与请求名一致可省略) |
| required |
参数是否必传 |
true |
| defaultValue |
参数为 null 或没有传递时的默认值 |
该属性指定 |
-
适用场景
-
GET :通过 URL 传递参数
-
POST:接收简单的表单参数(用户名、密码、页数)
-
支持简单类型(String/Integer/Long/Boolean 等),不支持复杂对象
-
代码示例
@Controller
public class PageController {
@RequestMapping("/page2")
public String page2 (
//前端传递的参数名必须为 username11
@RequestParam("username11") String username,
String password
Map<String, Object> map ) {
map.put("username", username);
map.put("password", password);
return "page2";
}
}
四、@RequestBody
-
核心作用:读取请求体(Request Body)中的数据,通常是 JSON/XML,自动转换为 Java 对象
-
核心特点:
-
仅用于带请求体的请求:POST/PUT/PATCH 等,GET 请求绝对禁止使用
-
一个方法中只能有一个 @RequestBody 参数(因为请求体只有一个)
-
支持复杂类型:实体类对象、集合、嵌套对象
-
适用场景
-
前后端分离:前端传 JSON 对象
-
POST 提交复杂数据
-
能够传输敏感,大量数据
-
代码示例
//用户实体类
@Data
public class User {
private String username;
private String password;
}
@Controller
public class PageController {
@RequestMapping("/page2")
public String page2 (
//POST请求,前端传入 {"username":"111","password":"123"}将对应的信息传给
//对应的 Java 实体类中
@RequestBody User user
Map<String, Object> map ) {
map.put("username", user.getUsername());
map.put("password", user.getPassword());
return "page2";
}
}
-
注意:@RequestBody 可与 @RequestParam 共存:URL 中传递简单不敏感的参数,请求体传复杂对象
五、@ResponseBody
-
核心作用:将方法的返回值作为响应体返回,不再对逻辑地址进行处理解析
-
核心特点:
-
加在方法上:该方法的返回值直接响应
-
加载类上:该类的所有方法都直接返回响应体
-
适用场景:
-
返回 JSON 数据
-
返回字符串/文件流
-
不渲染页面的纯 API 接口
-
代码示例
@Controller
public class PageController {
@RequestMapping("/page2")
@ResponseBody
public Map<String, String> page2 (
//POST请求,前端传入 {"username":"111","password":"123"}将对应的信息传给
//对应的 Java 实体类中
@RequestBody User user) {
Map<String, String> dataList = new ConcurrentHashMap();
dataList .put("username", user.getUsername());
dataList .put("password", user.getPassword());
//return "page2"; //直接返回 page2 字符串,不渲染页面
return dataList ;// 返回该集合中的数据
}
}