常用的前端4种请求方式

张春  论坛元老 | 2025-1-15 17:32:17 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1031|帖子 1031|积分 3093

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x

一、GET请求

GET 请求用于向指定资源发出请求,请求中包罗了资源的 URL 和请求参数。服务器端通过解析请求参数来返回相应的资源,不会修改服务器端的状态。
1.1 利用方式

利用 GET 请求方式提交的数据会被包罗在 URL 中,因此易于被缓存和浏览器生存,但也因此不适合用于提交敏感数据。
第一种情形:
前端发送get请求,利用data方式传递参数。
  1. export function empList(query){
  2.   return request({
  3.     url:'/emps/list',
  4.     method:'get',
  5.     data:query
  6.   })
  7. }
复制代码
后端利用@GetMapping注解,倒霉用@RequestBody吸收参数
  1. @GetMapping("/list")
  2. public Result listEmp(Emp emp){
  3.        List<Emp> emps = empService.listEmp(emp);
  4.        return Result.success(emps);
  5. }
复制代码
这种方法现实吸收不到前端传递来的参数,因为get请求参数传递不能是data,而应该是params
假如把后端吸收参数方式改为@RequestBody,前端不作改动,则请求会报400错误(请求失败),后端报缺失需要的请求体,也就是需要Emp参数,但是前端并没有传送过来。
[org.springframework.http.converter.HttpMessageNotReadableException: Required request
body is missing: public cn.cjc.pojo.Result
cn.cjc.controller.EmpController.list(cn.cjc.pojo.Emp)
结论:在获取数据,即查询数据库的时间,利用get请求方式,利用params的方式传递参数,或者利用url占位符的方式传递参数。不要在查询操纵中利用post方法。
第二种情形:
前端发送get请求,倒霉用data方式传递参数
  1. export function selectById(id) {
  2.   return request({
  3.     url: '/emps/'+id,
  4.     method: 'get',
  5.   })
  6. }
复制代码
后端利用@GetMapping注解,利用@PathVariable吸收参数
  1. @GetMapping("/{id}")
  2. public Result getById(@PathVariable Integer id){
  3.        log.info("根据ID查询员工信息, id: {}",id);
  4.        Emp emp = empService.getById(id);
  5.        return Result.success(emp);
  6. }
复制代码
结论:当前端发起GET请求时,若传递的是一个对象,则后端吸收数据时,不需要用@RequestBody来转换JSON串,若传递的是一个具体的值或参数则后端必须用@PathVariable来吸收。
1.2 优缺点

GET 请求的优点包括:


  • 可以被缓存和浏览器生存。
  • 对服务器性能的影响较小。
GET 请求的缺点包括:


  • 不适合用于提交敏感数据,以为请求参数会出现在URL中。
  • 仅实用于对资源进行查询操纵,不能修改服务器端的状态。
1.3 应用场景



  • 获取资源信息。
  • 对资源进行查询操纵。
二、POST请求

POST 请求用于向指定资源提交数据,通常会导致服务器端的状态发生变化。例如,在 Web 表单中填写信息并提交时,就是利用 POST 请求方式将表单数据提交到服务器存储。
利用 POST 请求方式提交的数据会被包罗在请求体中,而不像 GET 请求方式那样包罗在 URL 中。因此,POST 请求可以提交比 GET 更大的数据量,并且相对更安全。
2.1 利用方式

第一种情况:
前端发送post请求,利用data方式传递参数,传递的是一个对象
  1. //POST请求,且传递的是一个对象
  2. export function add(emp) {
  3.   return request({
  4.     url: '/emps',
  5.     method: 'post',
  6.     data: emp
  7.   })
  8. }
复制代码
后端利用@PostMapping注解,利用@RequestBody吸收参数
  1. @PostMapping
  2. public Result add(@RequestBody Emp emp){
  3.        empService.add(emp);
  4.        return Result.success();
  5. }
复制代码
结论: POST请求,一般用于新增或登录操纵,通常传递为一个对象即一个JSON串,后端吸收时必须利用@RequestBody注解来标识,用data方式传递参数
第二种按情:
前端发送post请求,利用params方式传递参数,传递的不是一个对象,而是一组参数,比如登录操纵
  1. export function login(username, password) {
  2.     return request({
  3.         url: '/login',
  4.         method: 'post',
  5.         params: {
  6.             username: username,
  7.             password: password
  8.         }
  9.     })
  10. }
复制代码
后端利用@PostMapping注解,倒霉用@RequestBody
  1.     @PostMapping("/login")
  2.     public Map doLogin(String username, String password) {
  3.         User user = userService.selUserByName(username);
  4.         Map map = new HashMap();
  5.         if (Objects.isNull(user)) {
  6.             map.put("result", "no");
  7.         } else {
  8.             if (Objects.equals(user.getPassword(), password)) {
  9.                 map.put("code", 200);
  10.                 map.put("result", "登录成功");
  11.                 //模拟登录
  12.                 System.out.println("登录成功");
  13.                 log.info("登录成功");
  14.             } else {
  15.                 System.out.println("登录失败");
  16.                 map.put("result", "no");
  17.             }
  18.         }
  19.         return map;
  20.     }
复制代码
结论: POST请求,一般用于新增或登录操纵,传递一组参数的时间,后端吸收时倒霉用利用@RequestBody注解来标识,用params方式传递参数
2.2 优缺点

POST 请求的优点包括:


  • 可以提交比 GET 更大的数据量。
  • 相对更安全,因为请求参数不会被包罗在 URL 中。
POST 请求的缺点包括:


  • 对服务器性能的影响较大。
  • 不实用于对同一资源进行多次操纵。
2.3 应用场景



  • 向服务器提交表单数据。
  • 向服务器上传文件。
  • 创建资源或提交数据到服务器。
三、PUT请求

PUT 请求用于向服务器更新指定资源,可以理解为对服务器上的资源进行修改操纵。利用 PUT 请求方式会覆盖原有的资源内容,因此需要审慎利用。
3.1 利用方式

前端发送put请求,利用data方式传递参数
  1. export function update(emp) {
  2.   return request({
  3.     url: '/emps',
  4.     method: 'put',
  5.     data: emp
  6.   })
  7. }
复制代码
后端利用@PutMapping注解,利用@RequestBody吸收参数
  1. @PutMapping
  2. public Result update(@RequestBody Emp emp){
  3.        empService.update(emp);
  4.        return Result.success();
  5. }
复制代码
假如前端利用data传递参数,后端倒霉用@RequestBody注解吸收参数,则吸收不到前端传递过来的参数(对象为null)。
假如前端利用params传递参数,后端利用@RequestBody注解吸收参数,则会报请求体缺失异常(请求体中需要Emp参数,但是没有)。
假如前端利用params传递参数,后端倒霉用@RequestBody注解吸收参数,是可以吸收到前端传递过来的参数(对象为null)。
虽然可以利用post代替put但是同样也不建议如许利用。
结论:当前端发起PUT请求时,若传递为一个对象即一个JSON串,则后端必须用@RequestBody注解进行标识;若传递参数为具体的值,后端吸收时不需要任务注解进行标识。
3.2 优缺点

PUT 请求的优点包括:


  • 可以更新指定的资源。
PUT 请求的缺点包括:


  • 对服务器性能的影响较大。
  • 不实用于对同一资源进行多次操纵。
3.3 应用场景



  • 更新指定的资源。
  • 按照条件更新一组资源。
四、DELETE请求

DELETE 请求用于请求服务器删除指定的资源,可以理解为对服务器上的资源进行删除操纵。利用 DELETE 方式请求会导致指定的资源被永世删除,因此需要审慎利用。
4.1 利用方式

前端利用delete请求方式,传输单个参数,URL中设置占位符参数
  1. //传输单个参数
  2. export function deleteById(id) {
  3.   return request({
  4.     url: '/depts/' + id,
  5.     method: 'delete'
  6.   })
  7. }
复制代码
后端利用@DeleteMapping注解,@PathVariable获取URL参数
  1.    @GetMapping("/{id}")
  2.     public Region findRegion(@PathVariable Integer id) {
  3.         return regionService.selectById(id);
  4.     }
复制代码
假如前端利用params传递参数,后端利用@RequestParam,则前端报400(请求失败),后端报缺少需要的参数错误;
前端利用data传递参数,后端利用@RequestParam仍旧不行,报相同的错误。
利用post请求也可以完成delete的操纵,但是不支持如许做。
结论:当前端发起DELETE请求时,传递的是一个具体的值或参数,后端吸收参数必须用@PathVariable注解进行标识。
4.2 优缺点

DELETE 请求的优点包括:


  • 可以永世删除指定的资源。
DELETE 请求的缺点包括:


  • 对服务器性能的影响较大。
  • 不实用于对同一资源进行多次操纵。
4.3 应用场景



  • 删除指定的资源。
  • 按照条件删除一组资源。
五.总结

主要针对于GET和POST请求:

  • GET拼接url,POST传递body,get限定字符串长度
  • 请求缓存:GET 会被缓存,而post不会,原因是get是url的请求
  • 收藏书签:GET可以,而POST不能,原因是url可以收藏,
  • 保留浏览器历史记录:GET可以,而POST不能,原因是get的url请求
  • 用处:get常用于取回数据,post用于提交数据
  • 安全性:post比get安全,是因为post是请求体,不会在url上被劫持!
  • 请求参数:querystring是url的一部门get、post都可以带上。
  • get的querystring仅支持urlencode编码,post的参数是放在body(支持多种编码)
  • 请求参数长度限定:get请求限定字符串长度 ,post请求不限定字符串长度

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张春

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表