当前位置: 首页 > article >正文

如何在 Spring MVC 中使用 `@PostMapping`? 如何在 Spring MVC 中使用 `@PutMapping`?

@PostMapping@PutMapping 是 Spring MVC 中用于处理 HTTP POST 和 PUT 请求的注解。它们分别对应 HTTP 协议中的 POST 和 PUT 方法,通常用于创建和更新资源。下面详细解释如何在 Spring MVC 中使用这两个注解。

1. 使用 @PostMapping

@PostMapping 注解用于处理 HTTP POST 请求。POST 请求通常用于创建新的资源。

示例代码

假设我们有一个 Employee 实体类和对应的 EmployeeService 接口:

package com.itheima.reggie.entity;

import lombok.Data;

import java.time.LocalDateTime;

@Data
public class Employee {
    private Long id;
    private String name;
    private String username;
    private String password;
    private String phone;
    private String email;
    private Integer status;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
    private Long createUser;
    private Long updateUser;
}
package com.itheima.reggie.service;

import com.itheima.reggie.entity.Employee;

public interface EmployeeService {
    Employee save(Employee employee);
}
控制器方法
import com.itheima.reggie.entity.Employee;
import com.itheima.reggie.service.EmployeeService;
import com.itheima.reggie.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @PostMapping("/employees")
    public R<String> createEmployee(@RequestBody Employee employee) {
        // 设置创建时间和创建人
        employee.setCreateTime(LocalDateTime.now());
        employee.setCreateUser(1L); // 假设当前登录用户的ID为1

        // 保存员工信息
        Employee savedEmployee = employeeService.save(employee);

        return R.success("员工信息创建成功");
    }
}

2. 使用 @PutMapping

@PutMapping 注解用于处理 HTTP PUT 请求。PUT 请求通常用于更新现有资源。

示例代码

假设我们有一个 Employee 实体类和对应的 EmployeeService 接口(与上面相同):

控制器方法
import com.itheima.reggie.entity.Employee;
import com.itheima.reggie.service.EmployeeService;
import com.itheima.reggie.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;

@RestController
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @PutMapping("/employees")
    public R<String> updateEmployee(HttpServletRequest request, @RequestBody Employee employee) {
        // 记录日志
        log.info(employee.toString());

        // 获取当前线程ID
        long id = Thread.currentThread().getId();
        log.info("线程id为:{}", id);

        // 获取当前登录用户的ID
        Long empId = (Long) request.getSession().getAttribute("employee");
        if (empId == null) {
            return R.error("用户未登录");
        }

        // 设置更新时间和更新人
        employee.setUpdateTime(LocalDateTime.now());
        employee.setUpdateUser(empId);

        // 更新员工信息
        employeeService.updateById(employee);

        return R.success("员工信息修改成功");
    }
}

详细解释

@PostMapping 示例
  1. 注解

    • @PostMapping("/employees"):表示该方法处理发送到 /employees 路径的 POST 请求。
  2. 方法签名

    • public R<String> createEmployee(@RequestBody Employee employee)
      • 返回类型R<String>,表示返回一个封装了字符串类型数据的响应结果。
      • 参数
        • @RequestBody Employee employee:用于接收请求体中的 JSON 数据,并将其自动转换为 Employee 对象。
  3. 设置创建时间和创建人

    • employee.setCreateTime(LocalDateTime.now());:设置创建时间为当前时间。
    • employee.setCreateUser(1L);:设置创建人为当前登录用户的 ID(假设为 1)。
  4. 保存员工信息

    • Employee savedEmployee = employeeService.save(employee);:调用 employeeServicesave 方法保存员工信息。
  5. 返回响应结果

    • return R.success("员工信息创建成功");:返回一个成功的响应结果,包含成功消息 “员工信息创建成功”。
@PutMapping 示例
  1. 注解

    • @PutMapping("/employees"):表示该方法处理发送到 /employees 路径的 PUT 请求。
  2. 方法签名

    • public R<String> updateEmployee(HttpServletRequest request, @RequestBody Employee employee)
      • 返回类型R<String>,表示返回一个封装了字符串类型数据的响应结果。
      • 参数
        • HttpServletRequest request:用于获取 HTTP 请求的相关信息。
        • @RequestBody Employee employee:用于接收请求体中的 JSON 数据,并将其自动转换为 Employee 对象。
  3. 记录日志

    • log.info(employee.toString());:记录传入的 Employee 对象的信息,便于调试和跟踪。
  4. 获取当前线程 ID

    • long id = Thread.currentThread().getId();:获取当前执行线程的 ID。
    • log.info("线程id为:{}", id);:记录当前线程的 ID,便于调试和跟踪。
  5. 获取当前登录用户的 ID

    • Long empId = (Long) request.getSession().getAttribute("employee");:从当前会话中获取登录用户的 ID。
    • if (empId == null) { return R.error("用户未登录"); }:如果会话中没有 “employee” 属性,返回一个错误响应。
  6. 设置更新时间和更新人

    • employee.setUpdateTime(LocalDateTime.now());:设置更新时间为当前时间。
    • employee.setUpdateUser(empId);:设置更新人为当前登录用户的 ID。
  7. 更新员工信息

    • employeeService.updateById(employee);:调用 employeeServiceupdateById 方法更新员工信息。
  8. 返回响应结果

    • return R.success("员工信息修改成功");:返回一个成功的响应结果,包含成功消息 “员工信息修改成功”。

总结

  • @PostMapping:用于处理 HTTP POST 请求,通常用于创建新的资源。
  • @PutMapping:用于处理 HTTP PUT 请求,通常用于更新现有资源。

通过使用这两个注解,你可以方便地在 Spring MVC 中处理不同的 HTTP 请求,并实现相应的业务逻辑。希望这能帮助你更好地理解和使用 @PostMapping@PutMapping。如果你有其他问题,欢迎继续提问。


http://www.kler.cn/a/398929.html

相关文章:

  • SQLite 和 MySQL语法区别
  • Vue通过file控件上传文件到Node服务器
  • 01.02、判定是否互为字符重排
  • 【计算机网络】协议定制
  • MCU的时钟体系
  • Ubuntu VNC Session启动chromium和firefox报错
  • Linux:版本控制器git和调试工具cgdb
  • react+hook+vite项目使用eletron打包成桌面应用+可以热更新
  • 使用 Python 和 Selenium 解决 hCaptcha:完整指南
  • fastadmin常用操作
  • 推荐一款功能强大的光学识别OCR软件:Readiris Dyslexic
  • YOLO-SLD: An Attention Mechanism-ImprovedYOLO for License Plate Detection
  • 大三学生面试经历(2)
  • K8s学习笔记之了解k8s的网络模型
  • Vue2教程001:初识Vue
  • C 语言Union 结构
  • Docker compose部署RocketMQ(单机版)
  • 解剖了一个Github 5k Star项目
  • Android笔记(三十六):封装一个Matrix从顶部/底部对齐的ImageView
  • C#获取指定文件夹下所有文件的两种方式(使用Directory.GetFiles()和Directory.EnumerateFiles()函数)及其区别
  • 自动语音识别(ASR)与文本转语音(TTS)技术的应用与发展
  • 【黑马点评debug日记】redis登录跳转不成功
  • 操作系统学习笔记-5 传输层
  • Embedding的用法
  • SSDT Hook
  • 小程序-基于java+SpringBoot+Vue的校园失物招领系统设计与实现