springMVC高级应用——如何开发RESTful API

0.前言

对于springmvc的基础开发相信大家已经不陌生了,不过对于一些高级应用,我们还需要学习熟悉。因此,本篇博客将介绍如何使用springmvc开发RESTful API,有几个新的知识点需要掌握一下。

1.RESTful介绍

REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。Fielding是一个非常重要的人,他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。所以,他的这篇论文一经发表,就引起了关注,并且立即对互联网开发产生了深远的影响。Fielding将他对互联网软件的架构原则,定名为REST。如果一个架构符合REST原则,就称它为RESTful架构。


REST(Representational State Transfer):表述性状态转移是一种跨平台、跨语言的架构风格,而不是一种标准
什么是表述性状态转移呢?以下是我的理解:

  •     表述性:每个资源都有一个唯一的资源标识符URI,而这些资源又可以用XML、JSON等方式来表述
  •     状态:服务器资源的状态。这个资源可能:已存在、未被创建、已删除等。
  •     转移:客户端通过使用HTTP协议定义的通用动词方法,发起Http请求,使得服务端的资源状态发生转变。

因此,一个RESTful架构应该满足:

  1.  用URL来描述资源而不是行为;
  2.  使用HTTP方法来描述行为,使用HTTP状态码来表示不同结果;
  3.  使用JSON数据交互,对服务器端资源进行操作,实现"表述性状态转移"。

比如:

传统请求写法和RESTful请求的对比
动作传统请求METHODRESTful请求METHOD
查询/user/query?name=zhangsanGET/user?name=zhangsanGET
详情/user/getInfo?id=1GET/user/1GET
新增/user/add?name=lisiPOST/userPOST
修改/user/update?id=1&name=tomPOST/user/1PUT
删除/user/delete?id=1POST/user/1DELETE

可以看到,RESTful风格明显要简洁许多。

2.映射配置

由于RESTful风格的原因,我们的前端控制器DispatcherServlet的拦截形式不能像是以前那种*.do或者*.action了,需要配置成"/"(注意不是“/*“)

<url-pattern>/</url-pattern>

如果是SpringBoot构建的项目,默认的拦截形式就是“/”,不用再进行配置。(通过server.servlet.path属性)

3.相关注解

@RestController

这个注解是@Controller和@ResponseBody的结合,标注在class上,声明这是一个RESTful的Controller,返回的数据是JSON

@GetMapping

@RequestMapping(method = RequestMethod.GET)的变体,同理还有PostMapping、PutMapping、DeleteMapping

@PathVariable

RESTful的调用经常会通过URL传参,此时使用@PathVariable可以获取URL中包含的参数,例如

    @GetMapping("/user/{id}")
    public User info(@PathVariable Long id){
        System.out.println(id);
        return new User();
    }

而我们如果要对id进行一些简单校验,可以直接在{ }里写上正则表达式,springmvc会自动帮我们解析匹配,如果不满足,就不会进行处理(返回405)。例如:校验id为数字组成

    @GetMapping("/{id:\\d+}")
    public User info(@PathVariable Long id){
        System.out.println(id);
        return new User();
    }

4.结语

关于如何开发RESTful API就介绍到这里吧。有什么不对的地方请各位指正谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值