Spring Web MVC是构建于Servlet API构建的Web框架,来自于Spring webMVC模块, MVC是model View Controller的缩写,是软件工程中的一种软件架构模式,它把软件系统分为模型,视图,控制器三个基本部分
学习Spring MVC,需要掌握三个功能
1、连接的功能:将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用到我们的Spring程序
2、获取参数的功能:用户访问的时候会带一些参数,在程序中需要想办法获取到参数
3、输出数据的功能:执行了业务逻辑后,将程序执行的结果返回给用户
对于Spring MVC来说,掌握了以上3个功能就相当于掌握了Spring MVC
SSM项目 = Spring + Spring MVC + MyBatis
// @Controller // 让框架启动的时候自动加载当前类
// @ResponseBody // 告知返回结果是数据
@RequestMapping("/test") // 路由注册, 浏览器获取前端接口和后端程序连接功能实现(支持GET,POST)
@RestController // 等于 ResponseBody + Controller
public class TestController {
@RequestMapping("/hi")
public String sayHi() {
return "hi, Spring MVC";
}
}
指定路由接收请求的方法
public class TestController {
// 目标,只支持POST请求
// 方法一、设置RequestMapping method属性
// @RequestMapping(value = "/hi", method = RequestMethod.POST)
// 方法二、使用@PostMapping
@PostMapping("hi")
public String sayHi() {
return "hi, Spring MVC";
}
}
传参数注意事项:在SpringMVC中传递参数一定要使用包装类型,而非基础类型。如果设置为基础类型,忘记传递该参数,使用基础类型会直接报错(程序500),而使用包装类型不会报错,只是值为null
@RequestMapping("/test") // 路由注册
@RestController // 等于 ResponseBody + Controller
public class TestController {
@GetMapping("/hi")
public String sayHi(String name) {
return "Hi + " + name;
}
}
localhost:8080/test/show-user?id=1&name=张三&age=123
@GetMapping("/show-user")
public String showUser(User user) {
return user.toString();
}
前端传递的参数key和我们后端接收的key可以不一致,比如前端传递了一个time,而后端想要使用createtime字段来接收,这样就会出现参数不匹配导致后端接受不到前端数据
可以使用@RequestParam来重命名前后端的数据
@GetMapping("/show-time")
public String showTime(@RequestParam("t") String startTime, @RequestParam("t2") String endTime) {
return "开始时间:" + startTime + "结束时间:" + endTime;
}
需要注意使用@RequestParam注解自带一个required属性,被设置的参数将会被默认设置成必传的,可以通过给@RequestParam注解设置false属性进行取消
@RequestParam(value = "t", required = false) // @RequestParam 注解设置required 属性
PostMan构建携带Json对象的请求:在Body中选择原生模式,然后选择数据类型为Json
@RequestBody会接收请求的正文(POST方法),将其中的数据交给接收的对象
// 接收Json对象,场景:和第三方系统进行通信时常见场景
@PostMapping("/show-user")
public String showUser(@RequestBody User user) {
return user.toString();
}
直接从URL中获取参数
@PostMapping("/logon/{name}/{password}")
public String logon(@PathVariable("name") String name, @PathVariable(password) String password) {
return name + ":" + password;
}