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

ops/2025/3/22 6:45:16/

目录

前言

一.问题描述

二.后端实现

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 {@Autowiredprivate 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 {@Autowiredprivate 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请求)

javascript">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请求给后端

javascript">//点击气泡确认框的“通过”按钮,触发事件passInvoice(row)
const passInvoice = async (row) => {//alert("通过");//alert(JSON.stringify(row))//这是点击的那一行的发票的全部信息//根据发票id,将该发票的状态改为审核通过(daily_state == 3)//构造参数对象dataconst 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.ppmy.cn/ops/166914.html

相关文章

2025深圳国际数字能源展全球招商启动,聚焦能源产业数字化转型

近日,2025深圳国际数字能源展组委会正式宣布,展会将于9月18 - 21日在深圳会展中心盛大举行,目前全球招商已全面启动。该展会旨在汇聚全球数字能源领域的前沿技术与创新成果,推动能源产业的数字化转型,助力构建绿色、高…

网络华为HCIA+HCIP数据链路层协议-以太网协议

以太网协议 以太网是当今现有局域网(Local Area Network,LAN)采用的最通用的通信协议标准,该标准定义了在局域网中采用的电缆类型和信号处理方法。以太网是建立在CSMA/CD(Carrier Sense Multiple Access/Collision Detection,载波监听多路访问/冲突检测)机制上的广…

人工智能与人的智能,改变一生的思维模型分享【4】决策树

决策树( DECISION TREE) 一般由一个决策图和若干可能的结果组成。是一种通过罗列解题的关键步骤以及各步骤发生的条件和结果,由此来创建到达目标的规划。 我们很早就知道有一个方法,叫做当你苦闷、纠结的时候,把你的所…

设计模式,持续更新

创建型 简单工厂 public interface Product{}public class ConcreteProduct implements Product { } public class ConcreteProduct1 implements Product { } public class ConcreteProduct2 implements Product { } public class SimpleFactory{public Product createProduc…

TCP/IP四层网络模型

TCP/IP四层网络模型 TCP/IP四层网络模型OSI七层网络模型总结记忆描述 整理一下TCP/IP四层网络模型和OSI七层网络模型的知识点。 TCP/IP四层网络模型 TCP/IP模型是互联网的基础,它由以下四层组成: 应用层(Application Layer)&…

VIC模型率定验证

在气候变化问题日益严重的今天,水文模型在防洪规划,未来预测等方面发挥着不可替代的重要作用。目前,无论是工程实践或是科学研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等。虽然,这些软件有各自的优点;但是&am…

远程访问家里电脑上部署的Stable diffusion - 免费篇

最简单 - 远程桌面 ToDesk、向日葵远程桌面等... 最方便,但是没feel.... https://www.todesk.com/ https://sunlogin.oray.com/ (1/2)原生SD体验 - 内网穿透 自建服务FRP - 复杂 不受限 优点: 1. 不限流量 2. 不仅仅SD&#x…

基于k3s部署Nginx、MySQL、PHP和Redis的详细教程

先决条件 一台Linux服务器(或本地虚拟机),建议Ubuntu/CentOS基础命令行操作能力确保服务器有至少2GB内存和10GB磁盘空间 1. 安装k3s(极简Kubernetes) 1.1 一键安装 # 用root用户或sudo权限执行以下命令 curl -sfL h…