如何快速地在java中使用Restful API

什么是Restful API?
REST(英文: Representational State Transfer ,简称 REST ),它是 一种软件架构风格、设计风格,而 不是 标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
下面是Restful对应的几种请求方式,我们常用到的是前4种,后面的仅供参考和了解:
1、GET 获取资源
2、POST 新建资源
3、PUT 更新资源
4、DELETE 删除资源
5、TRACE 提供一种方法来测试当一个请求发生的时候,服务器通过网络收到的内容
6、HEAD HEAD请求和GET请求资源类似,但是仅仅返回响应的头部(没有具体的响应体)
7、OPTIONS OPTIONS方法允许客户端请求一个服务所支持的请求方法。它所对应的响应头(response header)是 Allow , 它非常简单地列出了支持的方法。
例:
200 OK
Allow: HEAD,GET,PUT,DELETE,OPTIONS
8、CONNECT 主要用来建立一个对资源的网络连接(通常请求一些能够把HTTP连接转发成为TCP连接并保持的代理)。一旦建立连接后,会响应一个200状态码和一条“Connection Established”的消息。
如何在java的Spring架构中使用Restful API?
使用过Spring MVC架构,就应该知道Restful API作用的层级是Controller层,也就是我们的控制层。我们开发过程中也是使用了这些知识点的,只不过可能没系统学习和使用过Restful API接口。下面,我们通过了解Restful API各个注解的情况,来理解它。
1、@Controller与@RestController
@RestController相当于是@Controller+@ResponseBody;
@Controller可以用于返回视图,如JSP、HTML页面,也包括返回ModelAndView对象。如果仅仅需要返回数据,那我们再添加一个@ResponseBody就可以了,等同于使用了一个@RestController。
2、@RequestMapping与(@GetMapping、@PostMapping、@PutMapping、@DeleteMapping)
首先查看@RequestMapping注解包含的注解属性
value/path 指定请求的实际地址,指定的地址可以是URI Template 模式;
method 指定请求的method类型, GET、POST、PUT、DELETE等
consumes 指定接受提交请求的内容类型(Content-Type),例如application/json, text/html;
produces 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
params 指定request中必须包含某些参数值时,才让该方法处理;
headers 指定request中必须包含某些指定的header值,才能让该方法处理请求。
我们可以看到,在@RequestMapping中,有一个method属性,当指定了具体的值时,我们可以简化成相应的注解,譬如:@RequestMapping(method = RequestMethod.GET)就对应着我们的@GetMapping注解。
3、@RequestMapping的属性配置
method属性文章开篇就讲解了,我们常用的有4种,对应增删改查,用RequestMethod的方式调用。consumes和produces类似,分别对应接收数据类型和返回数据类型(可以是多个类型,用花括号包裹多个请求方式),配置也很简单,用MediaType调用。
1)value/path属性的具体配置
value/path的值可以是以下几种类型:
A、具体的路径值;
B、含有某些变量的路径值;
C、含有正则表达式的路径值。
 
例A:
@RequestMapping(value="/hello")    
public String sayHi() {        
    return "Hi,nice to meet you.";    
}
例B:
当使用变量的时候,斜杠后面跟一个花括号,花括号内部填写变量名,之后再用@PathVariable注解来接收这个变量。
@RequestMapping(value="/hello/{name}")    
public String sayHi(@PathVariable String name) {        
    return "Hi:"+name+",nice to meet you.";    
}
变量也可以在层级中使用,譬如:
@RequestMapping(value="/hello/{name}/{age}") 
public String sayHi(@PathVariable String name,@PathVariable Integer age) { 
    return "Hi:"+name+",you are "+age+" years old."; 
}
同一个访问控制器,还可以映射多个请求路径,譬如:
@RequestMapping(value={"/hello/{name}","/hi/{name}"}) 
public String sayHi(@PathVariable String name) { 
    return "Hi:"+name; 
}
例C:
@RequestMapping(value="/hello/{age:^[1-9]\d$}/{name}") 
public String sayHi(@PathVariable String name,@PathVariable Integer age) { 
    return "Hi:"+name+",you are "+age+" years old."; 
}
正则表达式匹配请求路径,譬如我这里要求年龄是两位数,数字为其他的都不会被匹配到。
正则表达式书写的规则网上一抓一大把,这里推荐一个网站,它能将你输入的正则表达式用图形的方式展示出来,更加直观地看出我们写的规则是否正确: https://regexper.cn
2)params属性的具体配置
params指定了url参数(形如:localhost:23172/sfa/placeOrderController/hello/spirit?gender=male)、form-data或者x-www-form-urlencoded中的参数,譬如必需的参数是什么(如下age参数),参数的键值对必须是什么(如下gender=male参数)。跟其他属性类似,支持单个或多个参数填写。
注意:params属性中指定了参数是必须的,再在@RequestParam中指定参数不必须(@RequestParam(required = false)),@RequestParam的设置是无效的,即params属性的配置高于@RequestParam。
例:
@RequestMapping(value="/hello/{name}", params={"age","gender=male"}) 
public String sayHi(@PathVariable String name,@PathVariable Integer age) { 
    return "Hi:"+name+",you are "+age+" years old."; 
}
3)headers属性的具体配置
headers指定了request中,头部需要的参数信息,与之不符的请求都将被拒绝。同样支持单个或多个参数填写。
例:
@RequestMapping(value="/hello/{name}", headers={Referer=http://www.baidu.com/}) 
public String sayHi(@PathVariable String name) { 
    return "Hi:"+name; 
}
4、@PathVariable与@RequestParam
这两个注解都是用于处理参数的,那他们有什么不同呢?
其实看他们的名字,也能理解,@PathVariable是“路径变量”的意思,那他处理的参数就是@RequestMapping中value/path请求路径对应的变量。
@RequestParam是“请求参数”,获取的是键值对形式的参数,也就是上文提到的params属性对应的参数。
 
最后,大家有什么不懂的或者其他需要交流的内容,也可以进入我的QQ讨论群一起讨论:654331206
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值