@GetMapping、@PostMapping、@PutMapping、@DeleteMapping的区别

Spring4.3中引进了{@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping} 来帮助简化常用的HTTP方法的映射 并更好地表达被注解方法的语义,至于@PatchMapping可以暂时不用管,Patch方式是对put方式的一种补充,put方式是可以更新.但是更新的是整体.patch是对局部更新;

@GetMapping: 处理get请求,传统的RequestMapping来编写应该是@RequestMapping(value = “/get/{id}”, method = RequestMethod.GET)
新方法可以简写为:
@GetMapping("/get/{id}");

@PostMapping:处理post请求,传统的使用RequestMapping来编写同上;

@PutMapping:它的使用方法与PostMapping几乎是一样的,没什么区别,都可以将参数传递到Controller中,但是他们本质上区别很大,在这里我需要引入一个概念-----------幂等性:HTTP/1.1中的定义是指一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外)。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同,

这里需要关注几个重点:

  1. 幂等不仅仅只是一次(或多次)请求对资源没有副作用(比如查询数据库操作,没有增删改,因此没有对数据库有任何影响)。

  2. 幂等还包括第一次请求的时候对资源产生了副作用,但是以后的多次请求都不会再对资源产生副作用。

  3. 幂等关注的是以后的多次请求是否对资源产生的副作用,而不关注结果。

  4. 网络超时等问题,不是幂等的讨论范围。

幂等性是系统服务对外一种承诺(而不是实现),承诺只要调用接口成功,外部多次调用对系统的影响是一致的。声明为幂等的服务会认为外部调用失败是常态,并且失败之后必然会有重试。

以SQL为例,有下面三种场景,只有第三种场景需要开发人员使用其他策略保证幂等性:

        1、SELECT col1 FROM tab1 WHER col2=2,无论执行多少次都不会改变状态,是天然的幂等。

        2、UPDATE tab1 SET col1=1 WHERE col2=2,无论执行成功多少次状态都是一致的,因此也是幂等操作。

        3、UPDATE tab1 SET col1=col1+1 WHERE col2=2,每次执行的结果都会发生变化,这种不是幂等的。 

简单来说就是多次访问对rest服务产生的结果不会有改变。

 http协议明确规定,put、get与delete请求都是具有幂等性的,而post为非幂等性请求,就是说接口被定义为post请求可访问时,说明这个接口对数据库的影响是非幂等性的。所以一般插入新数据时,用post方法,更新数据库时,用put方法,以此类推@PostMapping注解是标示接口为非幂等性接口,@PutMapping注解是标示接口为幂等性接口。

@DeleteMapping 删除URL映射

@DeleteMapping("candidateAssess/{id}")
public ResponseResult deleteCandidateAssess(@PathVariable String id) {
    candidateAssessService.deleteCandidateAssess(id);
    return new ResponseResult("删除成功", 200);
}

 

至于上面提到的rest服务,感兴趣的可以自己查一查,对于rest服务经过查阅资料,觉得最精辟的解释就是:

看Url就知道要什么
看http method就知道干什么
看http status code就知道结果如何

 

posted @ 2020-09-25 14:23  悠悠南山下  阅读(9344)  评论(1编辑  收藏  举报