要实现Spring MVC中处理请求数据和响应数据的功能,@RequestBody和使用@ResponseBody注解。因此,在本文中,我们将通过示例深入探讨 @RequestBody 和 @ResponseBody 注解之间的区别。
@RequestBody
- @RequestBody主要与CRUD操作一起使用来读取请求体。
@PostMapping("/addStudent") public void AddStudent(@RequestBody Student student) { // body }
|
@ResponseBody
- @ResponseBody 通常与 GET 方法一起使用,用于编写响应正文内容。
@GetMapping("/getStudent") @ResponseBody public Student getStudent() { return student; }
|
目的
- @RequestBody:适用于传入的请求数据。
- @ResponseBody适用于传出的响应数据。
方法体
- @RequestBody 与 POST、PUT、PATCH 方法一起用于读取请求体。
- @ResponseBody与 GET 方法一起用于写入响应体。
返回值
- @RequestBody通常是 void 或简单类型
- @ResponseBody通常是代表响应数据的复杂对象
对象
- @RequestBody反序列化对象作为方法参数传递
- @ResponseBody从方法返回序列化对象。
有效载荷
- @RequestBody需要读取 JSON/XML 请求负载。
- @ResponseBody需要编写 JSON/XML 响应负载。
@RequestBody 和 @ResponseBody 注解示例:
第 1 步:建立一个新的 Spring MVC 项目
- 在您的首选 IDE(例如 IntelliJ 或 Eclipse 或 Spring Tool Suite)中创建一个新的 Maven 项目并添加以下依赖项。
- Spring web
- Spring Data JPA
- MySQL Driver
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.spring</groupId> <artifactId>Employee_Management</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Employee_Management</name> <description>Demo project for Employee_Management</description> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
|
配置 MySQL Database:
spring.datasource.url=jdbc:mysql://localhost:3306/employee_management_system spring.datasource.username=root spring.datasource.password=admin spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.hibernate.ddl-auto=update
|
模型:
package com.demo.model; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; @Entity public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String Name; private String Address; private int Salary; public Employee() { super(); // TODO Auto-generated constructor stub } public Employee(Long id, String name, String address, int salary) { super(); this.id = id; Name = name; Address = address; Salary = salary; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return Name; } public void setName(String name) { Name = name; } public String getAddress() { return Address; } public void setAddress(String address) { Address = address; } public int getSalary() { return Salary; } public void setSalary(int salary) { Salary = salary; } }
|
仓储:
package com.demo.repository; import org.springframework.data.jpa.repository.JpaRepository;
import com.demo.model.Employee;
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}
|
控制器:
package com.demo.controller;
import com.demo.model.Employee; import com.demo.repository.EmployeeRepository; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("/emp") public class EmployeeController { @Autowired private EmployeeRepository employeeRepository;
@ResponseBody @PostMapping public Employee addPerson(@RequestBody Employee employee) { return employeeRepository.save(employee); }
@ResponseBody @GetMapping public List<Employee> getAllEmployee() { return employeeRepository.findAll(); }
@ResponseBody @GetMapping("/{id}") public Employee getEmployeeById(@PathVariable Long id) { return employeeRepository.findById(id).orElse(null); } }
|
运行:mvn spring-boot:run
测试:测试 URL:使用 Postman
- POST:http://localhost:8080/emp — 发布员工数据
- GET: http://localhost:8080/emp — 获取所有员工详细信息
- GET: http://localhost:8080/emp/{id} — 获取按 ID 列出的员工详细信息