@PutMapping、@PatchMapping、@DeleteMapping解析
1. @PutMapping
put请求是从客户端向服务端发送数据,但与post不同的是,put真正的目的其实是执行大规模的替换操作,而不是更新操作。
假如,我们有一个订单,我想要更新某个订单的地址信息,这时,我们就可用put请求来完成操作。
@PutMapping("/{orderID}")public Order putOrder(@RequestBody Order order){ return repo.save(order) //服务端用来保存更新的order}
从语义上讲,put意味着"将数据放到这个URL上",其本质就是替换已有的数据。我们如果省略了订单上的某个属性,那么该属性的值就应该被NULL所替代,甚至订单中的某个物品的实体数据也应一起重新设置,否则它们将从订单中移除。
2. @PatchMapping
patch的目的是对资源数据打补丁或局部更新,举个栗子:
@PatchMapping(path="/{orderId}",consumes="application/json")public Order patchOrder(@PathVariable("orderId") Long orderId, @RequestBody Order patch){ Order order = repo.findById(orderId).get(); if(patch.getDeliveryName()!=null){ order.setDeliveryName(patch.getDeliveryName()); } ...... //下列都是类似的代码 return repo.save(order);}
上面的代码中,允许我们,只有当修改的内容非null时,才在本地数据库中的对应属性上修改,如果客户端没有改动,则属性不动,即对资源数据进行一个局部属性的更新,不会直接对整个实体进行更新。
注意,在GetMapping和PatchMapping中,引用的路径请求都是要变更的资源。
3. @DeleteMapping
有些时候,有的数据可能不再需要了,客户端可以通过HTTP DELETE请求来要移除某个资源。
而 @DeleteMapping 注解就能够非常便捷的声明能够处理DELETE请求的方法。举个栗子:
我们想要有一个能够删除订单资源的API,下面的方法就能实现这一点:
@DeleteMapping("/{orderId}")@ResponseStatus(code=HttpStatus.NO_CONTENT)public void deleteOrder(@PathVariable("orderId") Long orderId){ try{ repo.deleteById(orderId); }catch(EmptyResultDataAccessException e){}}
在这个方法中,真正负责删除订单的是里面的代码,@DeleteMapping指定deleteOrder()方法处理针对“/orders/{orderId}的DELETE请求。
在该方法中,需要注意的是,@ResponseStatus注解确保的是HTTP状态码为204。对于已经不存在的资源,我们没有必要返回任何的资源数据给客户端,因此DELETE请求中通常没有响应体,我们要以HTTP状态码的形式让客户端知道不要期望得到任何的内容。
最后
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。
来源地址:https://blog.csdn.net/m0_54883970/article/details/126801623