• @PutMapping、@PatchMapping、@DeleteMapping解析


    @PutMapping、@PatchMapping、@DeleteMapping解析


    1. @PutMapping

    put请求是从客户端向服务端发送数据,但与post不同的是,put真正的目的其实是执行大规模的替换操作,而不是更新操作

    假如,我们有一个订单,我想要更新某个订单的地址信息,这时,我们就可用put请求来完成操作。

    @PutMapping("/{orderID}")
    public Order putOrder(@RequestBody Order order){
        return repo.save(order)  //服务端用来保存更新的order
    }
    
    • 1
    • 2
    • 3
    • 4

    从语义上讲,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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    上面的代码中,允许我们,只有当修改的内容非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){}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这个方法中,真正负责删除订单的是里面的代码,@DeleteMapping指定deleteOrder()方法处理针对“/orders/{orderId}的DELETE请求。

    在该方法中,需要注意的是,@ResponseStatus注解确保的是HTTP状态码为204。对于已经不存在的资源,我们没有必要返回任何的资源数据给客户端,因此DELETE请求中通常没有响应体,我们要以HTTP状态码的形式让客户端知道不要期望得到任何的内容。

    最后

    深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

    因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

    小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。

  • 相关阅读:
    netty
    从官方源码精简出第1个FreeRTOS程序
    我的十年编程路 2016年篇
    微服务 第一章 Java线程池技术应用
    图形验证码登录
    蓝桥杯每日一题2023.11.9
    XCC批量更新固件微码
    UNI-APP_开发支付宝小程序注意事项与解决方法,支付宝小程序图片显示问题
    如何删除密码?知道密码和不知道密码的情况
    Java8新特性stream和parallelStream有什么区别
  • 原文地址:https://blog.csdn.net/m0_54883970/article/details/126801623