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

如何在 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 {@Autowiredprivate 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 {@Autowiredprivate EmployeeService employeeService;@PutMapping("/employees")public R<String> updateEmployee(HttpServletRequest request, @RequestBody Employee employee) {// 记录日志log.info(employee.toString());// 获取当前线程IDlong id = Thread.currentThread().getId();log.info("线程id为:{}", id);// 获取当前登录用户的IDLong 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。如果你有其他问题,欢迎继续提问。

相关文章:

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

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

AIGC Agent(智能体)应用开发高级工程师实战培训 —— 线上8周系统教学课程学习路线图

&#x1f3af; 课程目标 系统掌握AIGC核心技术&#xff1a;学员将通过项目驱动学习&#xff0c;从文本生成、图像创意到智能体开发&#xff0c;全面进阶AIGC技术&#xff0c;探索其在营销、教育、数据处理、知识管理等领域的实际应用。构建AIGC智能体服务体系&#xff1a;学成…...

GDSC、CTRP数据库学习

GDSC 写在前面下载数据疑问1.GDSC、CTRP数据里有TCGA配套的数据&#xff1f;数据类型&#xff1f;CTRP原始数据如何处理 写在前面 开此贴做GDSC的数据分析记录 下载数据 GDSC官网&#xff1a;http://www.cancerrxgene.org/ 由于在官网下载数据过于麻烦&#xff0c;于是我使用…...

【嵌入式】ESP32开发(一)ESP-IDF概述

文章目录 1 前言2 IDF环境配置3 在VS Code中使用IDF3.1 使用ESP-IDF例程3.2 底部按钮的作用【重要!】3.3 高级用法4 ESP-IDF框架分析5 从零开始创建一个项目5.1 组件(component)6 主要参考资料7 遇到的一些问题与解决办法8 对于ESP-IDF开发的一些感受1 前言 对于ESP32的开发…...

最新6.7分非肿瘤纯生信,使用机器学习筛选慢阻肺中的关键基因。机器学习在非肿瘤生信文章中正火,可重复!

关于非肿瘤生信&#xff0c;我们也解读过很多&#xff0c;主要有以下类型 1 单个疾病WGCNAPPI分析筛选hub基因。 2 单个疾病结合免疫浸润&#xff0c;铁死亡&#xff0c;自噬等基因集&#xff0c;机器学习算法等。 3 两种相关疾病联合分析&#xff0c;包括非肿瘤结合非肿瘤&…...

vue 提交表单抹除字段为空的数据

使用背景 在配合后端post请求接口的时候 仅需要将有值的字段传入接口中 关键代码 cleanDataObj(obj) {Object.keys(obj).forEach((key) > {if (obj[key] ) {delete obj[key]}})},demo如下 export default {data() {return {demoObject:{name:小花&#xff0c;sex:,hobb…...

web实验3:虚拟主机基于不同端口、目录、IP、域名访问不同页面

创建配置文件&#xff1a; 创建那几个目录及文件&#xff0c;并且写内容&#xff1a; 为网卡ens160添加一个 IPv4 地址192.168.234.199/24: 再重新激活一下网卡ens160&#xff1a; 重启服务&#xff1a; 关闭防火墙、改宽松模式&#xff1a; 查看nginx端口监听情况&#xff1a;…...

英伟达Isaac Manipulator产品体验

相关配置 Isaac Manipulator3.1.0Isaac Sim4.2.0Ubuntu20.04GPURTX 4090 LaptopCPUI9 13900HXMem64GB 过程记录与反馈 GPU加速效果 请描述您在使用Isaac Manipulator时&#xff0c;调用cuMotion加速库来进行机器人运动规划和轨迹优化等任务的步骤和过程&#xff0c;并记录任…...

网安加·百家讲坛 | 仝辉:金融机构鸿蒙应用安全合规建设方案

作者简介&#xff1a;仝辉&#xff0c;北京娜迦信息科技发展有限公司攻防安全负责人&#xff0c;深耕移动应用安全领域十余年&#xff0c;获得过CISP、CISSP、OSCP、PMP、CCRC-CIASW等相关证书&#xff0c;参与多项移动应用安全标准起草&#xff0c;参与华为、平安集团、中国移…...

PHP Session

PHP Session PHP Session 是一种在 PHP 中用于跟踪用户会话的技术。会话允许在用户浏览网站时存储和访问用户信息。本文将详细介绍 PHP Session 的工作原理、如何创建和销毁会话、会话的安全性和最佳实践。 什么是 PHP Session? 在 Web 开发中,HTTP 是一种无状态的协议,这…...

泷羽sec学习打卡-Linux基础2

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 关于Linux的那些事儿-Base2 一、Linux-Base2linux有哪些目录呢&#xff1f;不同目录下有哪些具体的文件呢…...

# 【STM32F1】——无线收发模块RF200与串口通信

【STM32F1】——无线收发模块RF200与串口通信 一、简介 本篇主要对调试无线收发模块RF200的过程进行总结,实现了以下功能。 串口普通收发:使用STM32F103C8T6的USART2串口接收中断,实现两个无线收发模块RF200间的通信。二、RF200介绍 电压:3.4-5.5V工作频率:418~455MHz发…...

计算机网络:运输层 —— TCP 协议概述与 TCP 报文段首部格式

文章目录 基本概念主要特点和功能TCP报文段的首部格式字段标志位扩展首部 传输控制协议&#xff08;Transmission Control Protocol&#xff0c;TCP&#xff09;协议是互联网上最常用的传输层协议之一&#xff0c;它负责提供可靠的端到端数据传输服务。TCP 协议采用连接导向的通…...

python正则表达式和递归

一、正则表达式 1.基础匹配 学习目标&#xff1a;了解什么是正则表达式&#xff0c;掌握re模块的基础使用 就是一种规则的定义&#xff0c;通过规则去验证给定的目标是否符合定义的规则。 正则的三个基础方法 match match是匹配开头&#xff0c;开头有python就算匹配成功&a…...

JAVA后端生成图片滑块验证码 springboot+js完整案例

前言 现在大部分网部都是图片滑块验证码&#xff0c;这个得要与后端联动起来才是确保接口安全性 通过我们系统在发送手机短息时都会选进行滑块验证&#xff0c;但是我们要保证发送短息接口的全安&#xff0c;具体路思如下 那么这个滑块的必须是与后端交互才能保证安全性&…...

Spring Boot中的自动装配机制

文章目录 1. 什么是自动装配&#xff1f;2. 自动装配是如何工作的&#xff1f;3. 如何开启自动装配&#xff1f;4. 自动装配的注意事项5. 结语推荐阅读文章 在Spring Boot的世界里&#xff0c;自动装配&#xff08;Auto-configuration&#xff09;就像春风拂面&#xff0c;轻轻…...

Brave127编译指南 Windows篇:配置Git(四)

1. 概述 在Brave浏览器的开发过程中&#xff0c;Git作为核心版本控制工具扮演着不可或缺的角色。作为当今最广泛使用的分布式版本控制系统&#xff0c;Git为开发者提供了强大的源码管理能力。通过Git&#xff0c;您可以轻松追踪代码变更、管理不同版本&#xff0c;并与其他开发…...

mysql数据库(五)多表查询

多表查询 文章目录 多表查询一、链表查询1.1交叉连接1.2 内连接1.3 左连接1.4 右连接1.5 全连接1.6 例子 二、子查询2.1 in与not in2.2 any/some2.3 all2.4 比较运算符2.5 exists 三、例子 查询中使用的表如下所示 ------------ | id | name | ------------ | 1 | IT | …...

【go从零单排】JSON序列化和反序列化

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 语言中&#xff0c;处理 JSON 数据主要依赖于 encoding/json 包。这个包提…...

海外携程机票token 1001分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我删…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...