Spring MVC是Spring框架中的一个模块,是基于Java的Web应用程序开发框架。它提供了一种用于构建灵活、高效、可扩展的Web应用程序的方式。Spring MVC允许开发者将业务逻辑与视图逻辑分离,以及支持MVC(Model-View-Controller)设计模式,使开发过程更加模块化和易于管理。
在Spring MVC中,控制器(Controller)负责处理用户请求,模型(Model)表示应用程序的数据和业务逻辑,视图(View)用于展示数据给用户。请求首先由DispatcherServlet(前端控制器)接收,然后根据配置的HandlerMapping找到对应的Controller进行处理,并最终返回相应的视图。
@RequestMapping 是 Spring Web 应⽤程序中最常被⽤到的注解之一,是用来实现 URL 路由映射的。
路由映射指的是,当⽤户访问⼀个 url 时,将⽤户的请求对应到程序中某个类的某个⽅法的过程就叫路由映射
@Controller
//标记类为控制器,处理用户请求
@ResponseBody
//将方法返回的对象直接作为响应体返回给客户端
@RequestMapping("/user")
public class UserDemo {
@RequestMapping(value = "/hi")
public Object getHi(){
return "zcx,你好!";
}
}
我们使用http://localhost:8080/user/hi这个即可访问,也就是localhost:8080加上类上的@RequestMapping(“/user”)与方法上的@RequestMapping(value = “/hi”)
@RequestMapping 即可修饰类,也可以修饰⽅法。
@Controller
//标记类为控制器,处理用户请求
@ResponseBody
//将方法返回的对象直接作为响应体返回给客户端
public class UserDemo {
@RequestMapping(value = "/hi")
public Object getHi(){
return "zcx,你好!";
}
使用http://localhost:8080/hi访问结果是一样的。
@RequestMapping 注解在Spring MVC中既可以用于处理 GET 请求,也可以用于处理 POST 请求,以及其他HTTP方法的请求
当然指定请求的话也可以如下写法
GET请求的两种写法:
@RequestMapping(value = "/user",method = RequestMethod.GET)
@GetMapping("/user")
POST请求的两种写法:
@RequestMapping(value = "/user",method = RequestMethod.POST)
@PostMapping("/user")
用来绑定请求参数到方法的参数上,可用来解决前后端参数名不一致问题。
@Controller
//标记类为控制器,处理用户请求
@ResponseBody
//将方法返回的对象直接作为响应体返回给客户端
@RequestMapping("/user")
public class UserDemo {
@RequestMapping(value = "/hi")
public Object getHi(@RequestParam("n") String name){
System.out.println(name+"你好");
return name+"你好!";
}
}
我们直接使用postman进行请求访问
将key-n与方法中的参数进行了绑定,当然再使用name的话就会报错(这是因为后端已经声明了前端必须传递⼀个 n 的参数)。
@RequestParam 注解还支持其他属性,例如:
required:指定参数是否为必填,默认为 true。
defaultValue:设置参数的默认值。
public Object getHi(@RequestParam(value = "n",required = false) String name)
public Object getHi(@RequestParam(value = "n",defaultValue = "zcx") String name)
@RequestBody 是 Spring MVC 框架中的一个注解,用于接收 HTTP 请求体中的数据,并将其绑定到方法的参数上。通常用于处理 POST 或 PUT 请求中传递的数据,特别是 JSON 或 XML 格式的数据。
假设我们有一个简单的实体类 User 表示用户信息:
public class User {
private String username;
private String email;
// Getters and setters
}
现在,我们想通过 POST 请求来创建一个新的用户,并将用户信息以JSON格式的数据传递到后端。我们可以使用 @RequestBody 注解将请求体中的JSON数据转换为 User 对象
@RestController
public class UserController {
@PostMapping("/createUser")
public String createUser(@RequestBody User user) {
// 处理逻辑,user对象将会从请求体中获取JSON数据
return "User created successfully!";
}
}
当客户端发送以下JSON数据的POST请求时:
{
"username": "john_doe",
"email": "[email protected]"
}
@RequestBody 注解会将请求体中的JSON数据转换为 User 对象,其中 username 字段的值为 “john_doe”,email 字段的值为 “[email protected]”。然后,createUser 方法中的参数 user 将被自动填充为包含上述JSON数据的 User 对象。
用于从请求的 URL 路径中获取参数的值。它通常用于处理 RESTful 风格的请求,从 URL 中提取路径变量,并将其绑定到方法的参数上。
@GetMapping("/example/{id}")
public String handleGetRequest(@PathVariable("id") Long id) {
// 处理逻辑,id 是从 URL 路径中获取的参数值
System.out.println("id="+id);
return "viewName";
}
使用http://localhost:8080/user/example/99进行访问
可看到获取的id为99
@PathVariable 注解还支持其他属性,例如:
required:指定路径变量是否为必须,默认为 true。
@RequestPart 注解用于处理复杂的请求数据,特别是多部分(multipart)请求数据,通常用于文件上传场景。它可以用于从请求中获取文件和其他数据。
@RequestMapping("file")
public String FileUpload(String name,@RequestPart("file") MultipartFile file) throws IOException {
String fileName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
// ⽂件保存地址
String filePath = ClassUtils.getDefaultClassLoader().getResource("stat ic").getPath() +
"/" + UUID.randomUUID() + fileName;
// 保存⽂件
file.transferTo(new File(filePath));
return "上传成功!"+filePath;
}
@RequestPart 注解将会将请求中的数据正确地映射到 name对象和 file 对象上,然后我们可以在后端进行相应的业务逻辑处理。