Spring中@RequestBody和@ResponseBody注解的区别

要实现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 列出的员工详细信息