restFul的增删改查

Spring自定义注解学习:https://blog.csdn.net/qq_34582693/article/details/88943120

JVM底层原理学习:https://blog.csdn.net/qq_34582693/article/details/79513676

JAVA多线程学习:https://blog.csdn.net/qq_34582693/article/details/79843258

Spring框架学习:https://blog.csdn.net/qq_34582693/article/details/86166527

欢迎关注,欢迎讨论。

使用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;
    }

新增:

/**

  • 新增
  • @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;
    }

删除:

/**

  • 删除
  • @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;
    }

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

/**

  • 修改
  • @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还是可以的:

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/Aa__Ki/article/details/108502435