Rest风格的请求方式

Rest风格的请求方式关注作者更多博客 一起学习一起进步 Spring 自定义注解学习 https blog csdn net article details JVM 底层原理学习 https blog csdn net article details JAVA 多线程学习 https blog csdn net 34

关注作者更多博客,一起学习一起进步

Spring自定义注解学习:Spring自定义注解学习_咋瓦鲁多!-CSDN博客

JVM底层原理学习:初步学习jvm底层原理_咋瓦鲁多!-CSDN博客

JAVA多线程学习:JAVA多线程学习心得(一)_咋瓦鲁多!-CSDN博客_多线程学习心得

Spring框架学习:Spring框架学习_咋瓦鲁多!-CSDN博客

欢迎关注,欢迎讨论。

使用Rest前,首先说一说Rest请求方式的好处,首先就是面向资源URI,即http请求的路径,Rest规定中要求URI各层只能用名词不用动词,这样相比传统的get请求有利于传输数据的稳定性,数据的操作流程不会被人轻易看破,也便于团队开发,各种URI一目了然;

再通过固定的请求方式,对URI中的资源进行各种操作,常用的有:

  • GET:查询;
  • POST:新增;
  • PUT:修改;
  • DELETE:删除;

符合这种风格的http请求,我们就叫它RestFul;

这其中还涉及到一个概念,叫做幂等性,即对该URI多少次操作,返回的结果都是相同的。

因为POST是新增,因此理论上讲他不是幂等的,其他方法都是幂等的。

接下来是实战,spring-boot架构,写了一个测试类,使用postman进行http请求测试:

@RestController public class UserController { 
  

@RestController:这是spring-boot的注解:包含

@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Controller @ResponseBody

说明它既是一个controller,同时支持rest风格

@PathVariable:自动将rest请求匹配到同名参数上

@ModelAttribute:自动将请求的form表单参数 组装成对象

@RequestBody:自动将请求的json参数 组装成对象

下面开始放码:

查询:

/ * restful风格操作 * @param name * @return */ @RequestMapping(value="/xx/{name}",method= RequestMethod.GET,produces="application/json;charset=UTF-8") private String query( @PathVariable String name) { String result = "查询一个名为"+name+"的结果"; return result; }

Rest风格的请求方式

新增:

  
/ * 新增 * @param user * @return */ @RequestMapping(value="/xx",method= RequestMethod.POST,produces="application/json;charset=UTF-8") private String add(@RequestBody User user) { String result = "新增一个名为"+user.getUsername()+",密码为"+user.getPassword()+"的结果"; return result; }

Rest风格的请求方式

删除:

/ * 删除 * @param username * @return */ @RequestMapping(value="/xx/{username}",method= RequestMethod.DELETE,produces="application/json;charset=UTF-8") private String del(@PathVariable String username) { String result = "删除一个名为"+username+"的结果"; return result; }

Rest风格的请求方式

修改:

为啥最后才说修改呢,因为有坑呗!

/ * 修改 * @param user * @return */ @RequestMapping(value="/xx",method= RequestMethod.PUT,produces="application/json;charset=UTF-8") private String edit(@RequestBody User user) { String result = "修改一个名为"+user.getUsername()+",密码为"+user.getPassword()+"的结果"; return result; }

我们发现,post和put的参数由@ModelAttribute变成了@RequestBody;

这是因为我一开始通过postman模仿form表单提交【修改】,后台参数为null,百度之,众多高手,有的说spring不支持put请求,有的说form表单不支持PUT和DELETE,有的说需要个过滤器。

我也挨个试了一下,最后发现用json还是可以的:

Rest风格的请求方式

于是有了这些总结,最后在提到一个小朋友:

PATCH:

理论上讲PUT所做的更新是对整个对象来说的,一般都是将整个对象传输到后台进行整体修改,如果我只有一个字段想要改变,也要这么做,有点浪费带宽,所以出现了PATCH:【局部更新】;

有人说PUT幂等,PATCH不幂等;

PUT把一个文件或资源放在一个特定的URI处,并且正好在那个URI处。如果该URI处已有文件或资源,则PUT 将替换该文件或资源。如果那里没有文件或资源,PUT 创建一个。PUT是幂等的,但矛盾的是PUT响应不可缓存。

POST将数据发送到特定的URI,并期望该URI处的资源处理该请求。此时,Web服务器可以确定如何处理指定资源上下文中的数据。POST方法不是幂等的,但只要服务器设置适当的Cache-Control和Expires标头,POST响应就可以缓存。

PUT或PATCH? 

PUT 用所提供的新表示替换整个资源,对于资源来讲当然是幂等的。

PATCH 使用提供的值替换源资源的一部分,当然这是很初级的理解。

点击头像查看更多有意思的java知识,一起进步,感谢观看与留言。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209185.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午9:50
下一篇 2026年3月19日 上午9:50


相关推荐

  • PHP生成随机数(昵称随机生成器)

    <?php/***@paramint$type1生成昵称,2生成姓名*//汉语-给用户自动生成昵称*/functionnickname($type=1){/***随机昵称形容词*/$nicheng_tou=[‘迷你的’,’鲜艳的’,’飞快的’,’真实的’,’清新的’,’幸福的’,’可耐的’,’快乐的’,’冷静的’,’醉熏的’,’潇洒的’,’糊涂的’,’积极的’,’冷酷的’,’深情的’,’粗暴的’,’温

    2022年4月11日
    83
  • 四旋翼飞行器结构和原理「建议收藏」

    四旋翼飞行器结构和原理前言:前年做电赛时留下的一套四旋翼飞行器如今只剩下四个旋翼和电机(不知道被谁给拆了,组装零件找不到了),趁着国庆几天假期,希望能够快速的将其重新DIY出来。其中控制和驱动板卡可以暂时先由面包板焊接出来,等验证成功能飞的起来时在重新设计集成电路板来实现整机。

    2022年4月6日
    54
  • 检索com类工厂中的组件失败_检索com类工厂的组件失败

    检索com类工厂中的组件失败_检索com类工厂的组件失败出现以下错误:检索COM类工厂中CLSID为{000209FF-0000-0000-C000-000000000046}的组件失败,原因是出现以下错误:8000401a因为配置标识不正确,系统无法开始服务器进程。请检查用户名和密码。(异常来自HRESULT:0x8000401A)。解决方案:1.开始-dcomcnfg,启动组件服务。2.找到Micro

    2022年8月22日
    9
  • java 身份证15位转18位「建议收藏」

    java 身份证15位转18位「建议收藏」1/**2*根据身份证号获取性别3*4*@parampid5*身份证号6*@return性别F为女M为男7*/8publicstaticStringg

    2022年8月5日
    9
  • SpringBoot2.x跨域问题(CrossOrigin失效问题)

    SpringBoot2.x跨域问题(CrossOrigin失效问题)SpringBoot 版本的不同 CrossOrigin 失效了 正确配置如下 CrossOrigin originPatter allowCredent true maxAge 3600

    2025年8月31日
    5
  • 2021python激活码破解方法

    2021python激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    60

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号