在vue项目中,使用Patch请求,实现根据id修改某张发票的日结状态

news2025/3/19 16:55:06

目录

前言

一.问题描述

二.后端实现

1.分析

2.检查后端拦截器,看看是否允许接收Patch类型的请求

3.编写Dto

4.编写controller层 

5.编写service层

6.mapper层

7.使用apifox,测试后端接口的可用性

三.前端实现

1.封装api(本质是axios请求)

2.在vue代码中,使用该api发送patch请求给后端

3、展示效果

四.重要的点

结语


前言

在vue项目中,我们修改表的某一行的部分字段时,是需要用axios中patch类型的请求来完成的,所以掌握发送、接收patch请求,是绕不开的一环。

一.问题描述

二.后端实现

1.分析

        分析一下:由于是修改发票表的某一行的某个字段(即部分资源),所以要用Patch请求来完成该操作。 请求的参数应该有:id(代表我们要修改的那行发票记录)、日结状态(是个整数,如:3代表审核通过)。

        注意:       

                ①一般使用patch请求时,id参数直接就放在请求路径中了。因为这样简洁明了。

                ②其他参数应该放到一个data对象中。

2.检查后端拦截器,看看是否允许接收Patch类型的请求

        注意:这一步很重要,如果你没配置后端拦截器,那么这一步可以跳过。如果你配置了后端拦截器,就好检查一下你的拦截器是否允许PATCH请求通过。

        博主就是因为没有好好检查,整了半天才发现是这个问题导致前端代码报错。

3.编写Dto

注意:

①patch请求要用data对象来传递参数。(除了get请求用params传递参数以外,其他类型的请求很少用params传递参数)。

②在InvoiceDto中,我们为什么没写id呢?因为我们想在patch请求的请求路径中携带id参数,所以就不在该Dto中携带了。

4.编写controller层 

@RestController//表明这是一个controller层,并且自动将对象转为JSON格式返回
@RequestMapping("/api/invoice")//该controller的访问路径
public class InvoiceController {
    @Autowired
    private InvoiceService invoiceService;

    //根据id,修改某个发票的状态(dailyState)
    @PatchMapping("/{id}/dailyState")
    public Result updateInvoiceDailyState(@PathVariable Integer id,@RequestBody InvoiceDto invoiceDto){
        //System.out.println(id + "--" + invoiceDto.toString());
        int i = invoiceService.updateInvoiceDailyState(id, invoiceDto);
        if(i>0){
            return new Result(200, "审核成功");
        }else{
            return new Result(500, "审核失败");
        }
    }
}

注意:

①我们在patch请求路径中携带id参数的形式如:@PatchMapping("/{id}/dailyState"),要用大括号{  }给id参数括起来。

②"/{id}/dailyState"的意思是:我们要修改该id对应的那张发票的日结状态dailyState,这样就能表示该patch请求是用来根据id修改某张发票的日结状态了。这做到了见名知意。

③要用@PathVariable注解来接收请求路径中的参数。

④要用@RequestBody注解来接收请求中的data对象参数。

5.编写service层

service层:

public interface InvoiceService {
    //根据id,修改某条发票记录的日结状态(dailyState)
    public int updateInvoiceDailyState(Integer id, InvoiceDto invoiceDto);
}

serviceImpl层:

@Service
public class InvoiceServiceImpl implements InvoiceService {
    @Autowired
    private InvoiceMapper invoiceMapper;

    //根据id,修改某条发票记录的日结状态(dailyState)
    public int updateInvoiceDailyState(Integer id, InvoiceDto invoiceDto) {
        int i = invoiceMapper.updateInvoiceDailyState(id, invoiceDto);
        return i;//返回的是影响行数
    }

}

6.mapper层

@Mapper
public interface InvoiceMapper {

    //根据id,修改某条发票记录的日结状态(dailyState)
    @Update("update invoice set daily_state = #{invoiceDto.dailyState} where id=#{id}")
    public int updateInvoiceDailyState(Integer id, InvoiceDto invoiceDto);
}

注意:当mapper层中,形参列表中不单单只有对象类型的参数时,我们访问对象中的属性,要通过#{对象名.属性名}的形式。   反之,要是形参列表中,只有对象参数,那么直接#{属性名}即可。

7.使用apifox,测试后端接口的可用性

三.前端实现

1.封装api(本质是axios请求)

import request from '@/request/request'

//编写方法“根据id,修改某张发票的日结状态(dailyState)”,并将其暴露出去
export function updateInvoiceDailyState(id, data){
    return request.patch(`/api/invoice/${id}/dailyState`,data);
}

注意:

①我们在前端发送axios请求时,如果要携带路径参数,那么就不能用单引号来盛请求路径,而是用反引号(也称“飘号”,如下图)

②上面的代码中,id表示要修改的发票id,data表示要修改的字段(放在了data对象中)。

2.在vue代码中,使用该api发送patch请求给后端

//点击气泡确认框的“通过”按钮,触发事件passInvoice(row)
const passInvoice = async (row) => {
    //alert("通过");
    //alert(JSON.stringify(row))//这是点击的那一行的发票的全部信息
    //根据发票id,将该发票的状态改为审核通过(daily_state == 3)
    //构造参数对象data
    const invoiceDto = {
        dailyState: 3
    }
    const res = await updateInvoiceDailyState(row.id, invoiceDto);
    if(res.code == 200){
        //弹框提示审核成功
        ElMessage.success(res.message);
        //刷新表格(查询所有待审核的发票)
        doQueryAllInvoice({dailyState:"2"});
    }else{
        ElMessage.error("审核失败");
    }

}

3、展示效果

四.重要的点

1、除了get请求使用params传递参数以外,其他类型的请求很少使用params传递参数,而是使用data对象来传递参数(后端使用@RequestBody注解来接收)。

2、patch请求代表修改某个id对应的一行数据的部分字段。此时尽量将id参数放在请求路径中(后端使用@PathVariable注解来接收请求路径参数) ,因为这样简洁明了、一眼能看出来,而且更加符合RESTful请求风格的要求。

3、其实将id放在data对象中传递也可以,只是不推荐而已,因为这样不简洁。

4、patch请求用来修改部分资源(即:一行中的部分字段)。

      put请求用来修改全部资源(即:一行中的所有字段)。

结语

以上就是我们在vue项目中,发送一个patch请求的例子,我们要好好了解这一块。

喜欢本篇文章的话,可以留个免费的关注~~

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2317899.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

某快餐店用户市场数据挖掘与可视化

1、必要库的载入 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns2、加载并清洗数据 # 2.1 加载数据 df pd.read_csv(/home/mw/input/survey6263/mcdonalds.csv)# 2.2 数据清洗 # 2.2.1 检查缺失值 print(缺失值情况:) print(df.isn…

[C++面试] 标准容器面试点

一、入门 1、vector和list的区别 [C面试] vector 面试点总结 vector 是动态数组,它将元素存储在连续的内存空间中。支持随机访问,即可以通过下标快速访问任意位置的元素,时间复杂度为 O(1),准确点是均摊O(1)。但在中间或开头插…

单片机学完开发板,如何继续提升自己的技能?

很多人学完开发板后都会卡在一个尴尬的阶段:觉得自己会的东西不少,但又不知道下一步该干啥。会点C语言,能烧录程序,能点亮LED,玩转按键,搞定串口等等,能用开发板做点小玩意儿,但面对…

明基PD2700U显示器无法调节图像模式

现象:明基PD2700U显示器无法调节图像模式,如下图: 目前未找到根本原因,推测可能是下面的原因: 1、安装了远程桌面软件:向日葵、虚拟显示器 2、显卡插入了接口,但是没接显示器 解决办法&#xf…

基于FPGA轨道交通6U机箱CPCI脉冲板板卡

板卡简介: 本板为脉冲板,脉冲板主要执行CPU下达的指令,通过实现各种控制算法来调节PWM,然后输出光纤PWM信号来驱动变频器功率模块以达到控制电机的目的。 性能规格: 电源:DC5V;15V FPGA&…

如何通过 Airbyte 将数据摄取到 Elasticsearch

作者:来自 Elastic Andre Luiz Airbyte 是一个数据集成工具,可自动化并可扩展地将信息从各种来源传输到不同的目的地。它使你能够从 API、数据库和其他系统提取数据,并将其加载到 Elasticsearch 等平台,以实现高级搜索和高效分析。…

如何用DeepSeek进行项目管理?AI重构项目全生命周期的实践指南

一、项目管理的核心工作范畴 现代项目管理包含六大核心模块,构成完整管理闭环: 1. 需求管理(20%工作量) 案例:某电商平台"双11"大促项目需整合23个部门的142项需求 关键动作:需求收集→优先级…

vue3 引入element-plus组件后,发现输入的时候没有提示,而且鼠标移到el-button显示unknown的简单解决方法

1、element-plus官方地址 一个 Vue 3 UI 框架 | Element Plus 2、安装 安装 | Element Plus 3、安装插件unplugin-vue-components、unplugin-auto-import并配制 快速开始 | Element Plus 4、输入关键词没有提示及ElButton:unknown的处理 1)装个扩展插件&#xf…

【Linux】浅谈环境变量和进程地址空间

一、环境变量 基本概念 环境变量(Environment Variables)是操作系统提供的一种机制,用于存储和传递配置信息、系统参数、用户偏好设置等。 环境变量的作用 配置程序行为: 程序可以通过环境变量获取配置信息,例如日…

如何使用 DeepEval 优化 Elasticsearch 中的 RAG 检索

作者:来自 Elastic Kritin Vongthongsri 学习如何使用 DeepEval 优化 RAG 流水线中的 Elasticsearch 检索器。 LLMs 容易产生幻觉、缺乏特定领域的专业知识,并受限于上下文窗口。检索增强生成(Retrieval-Augmented Generation - RAG&#xff…

行为模式---状态模式

概念 状态模式是一种行为模式,用于在内部状态改变的时候改变其行为。它的核心思想就是允许一个对象在其内部状态改变的时候改变它的行为。状态模式通过将对象的状态封装成独立的类,并将其行为委托给当前的状态对象,从而使得对象行为随着状态…

嵌入式裸机设计--MCU常用裸机架构有哪些?

为什么是裸机设计 792125321入群学习更高效! 在MCU(微控制器单元)裸机开发中,我们常见的架构设计主要围绕如何高效管理资源和任务调度。认识这些开发方式,对我们开发一个小型项目来说及有好处! 下面介绍…

【LInux进程六】命令行参数和环境变量

【LInux进程六】命令行参数和环境变量 1.main函数的两个参数2.利用main函数实现一个简单的计算器3.环境变量之一:PATH4.修改PATH5.在命令行解释器bash中查看所有环境变量6.用自己写的程序查看环境变量7.main函数的第三个参数8.本地的环境变量和环境变量9.环境变量具…

激光slam学习笔记10---ubuntu2004部署运行fastlivo2踩坑记录

背景:mars实验室又发福利啦!跑跑效果,验了那句,mars出品,必属精品!本人pc环境ubuntu20.04,基本流程按照readme走就行,sophus和vikit安装有些注意地方。本文做了一些部署踩坑记录&…

织梦DedeCMS优化文章模版里的“顶一下”与“踩一下”样式

测试的版本5.7.1UTF-8 一、插入<head>Js代码 将下面代码插入到文章模版里的<head>标签里 <script language"javascript" type"text/javascript" src"{dede:global.cfg_cmsurl/}/include/dedeajax2.js"></script> <…

IDEA+Docker插件一键部署SpringBoot项目到远程服务器

文章目录 1. 服务端1.1 安装Docker1.2 Docker放开远程连接1.3 重启Docker1.4 开放端口1.4.1 云端1.4.2 服务器内部防火墙指令 2.IntelliJ IDEA2.1 安装IDEA2.2 安装Docker插件2.3 SSH Configurations2.4 Docker选择对应的SSH2.5 Dockerfile2.5.1 Dockerfile2.5.2 Dockerfile Ed…

C++基础 [五] - String的模拟实现

目录 前言 string类的模拟实现 成员函数的实现 构造函数 拷贝构造函数 赋值运算符重载 析构函数 元素访问的实现 operator[ ] Iterator - 迭代器 容量大小的实现 size capacity reserve ​编辑resize 内容修改的实现 push_back append operator(char ch) …

AIAgent有哪些不错的开源平台

AIAgent领域有许多优秀的开源平台和框架&#xff0c;以下是一些值得推荐的开源平台&#xff1a; AutoGPT AutoGPT 是一个基于 OpenAI 的 GPT-4 和 GPT-3.5 大型语言模型的开源框架&#xff0c;能够根据用户给定的目标自动生成所需提示&#xff0c;并利用多种工具 API 执行多步骤…

Python刷题:流程控制(上)

今天刷的是PythonTip的Python 入门挑战中的题&#xff0c;整体难度不高&#xff0c;适合小白练手以及巩固知识点。下面会进行详细讲解。 每日一句 每一个拼命努力的人&#xff0c;都像是独自穿越黑暗森林的行者&#xff0c; 没有并肩的身影&#xff0c;唯有孤独如影随形&…

vulhub/Billu_b0x靶机----练习攻略

1.Billu_b0x靶场下载链接&#xff1a; https://download.vulnhub.com/billu/Billu_b0x.zip 2.下载后&#xff0c;解压出ova文件&#xff0c;直接拖至VMware中&#xff0c;重命名和选择存储位置&#xff0c;点击导入&#xff0c;报错点击重试即可。修改网卡为NAT模式。 打开靶…