RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。
REST(英文:Representational State Transfer,简称 REST)是一种互联网软件架构设计的风格,但它并不是标准,它只是提出了一组客户端和服务器交互时的架构理念和设计原则,基于这种理念和原则设计的接口可以更简洁,更有层次
如GET请求方式
传统风格: http://localhost:8081/myboot/student?id=1001&name=admin
RESTFUL风格: http://localhost:8081/myboot/student/1001/admin
以下摘自百度百科
RESTFUL特点包括:
1、每一个URI代表1种资源;
2、客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;
3、通过操作资源的表现形式来操作资源;
4、资源的表现形式是XML或者HTML;
5、客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。
RESTful主要使用如下注解
@RestController: 符合注解,是@Controller 和@ResponseBody组合
@PathVariable(路径变量) : 获取url中的数据
@GetMapping: 支持的get请求方式, 等同于 @RequestMapping( method=RequestMethod.GET)
@PostMapping: 支持post请求方式 ,等同于 @RequestMapping( method=RequestMethod.POST)
@PutMapping: 支持put请求方式, 等同于 @RequestMapping( method=RequestMethod.PUT)
@DeleteMapping: 支持delete请求方式, 等同于 @RequestMapping( method=RequestMethod.DELETE)
import org.springframework.web.bind.annotation.*;
/**
* REST(英文:Representational State Transfer,简称 REST)
* 一种互联网软件架构设计的风格,但它并不是标准,它只是提出了一组客户端和服务器交
* 互时的架构理念和设计原则,基于这种理念和原则设计的接口可以更简洁,更有层次
* 如GET请求方式,
* 传统风格: http://localhost:8081/myboot/student?id=1001&name=admin
* RESTFUL风格: http://localhost:8081/myboot/student/1001/admin
*
* @RestController: 符合注解,是@Controller 和@ResponseBody组合
*/
@RestController
public class RestfulController {
/**
* @PathVariable(路径变量) : 获取url中的数据
* 属性: value : 路径变量名;位置: 放在控制器方法的形参前面
*
* @GetMapping: 支持的get请求方式, 等同于 @RequestMapping( method=RequestMethod.GET)
* @PostMapping: 支持post请求方式 ,等同于 @RequestMapping( method=RequestMethod.POST)
* @PutMapping: 支持put请求方式, 等同于 @RequestMapping( method=RequestMethod.PUT)
* @DeleteMapping: 支持delete请求方式, 等同于 @RequestMapping( method=RequestMethod.DELETE)
*
* http://localhost:8080/myboot/student/1002
* {stuId}:定义路径变量, stuId自定义名称
*
* 注:不能使用多个,形参定义不同但url地址相同的请求,这样就报错找不到请求
* 如:@GetMapping("/student/{stuId}");@GetMapping("/student/{stuName}")
* http://localhost:8080/myboot/student/1002;http://localhost:8080/myboot/student/admin
*
* 浏览器 form 表单只支持 GET 与 POST 请求,而DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器,可以将这些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与 DELETE 请求
* <!--http请求方式-->
* <form action="..." method="post">
* <input type="hidden" name="_method" value="put" />
* <!--value值改成delete 请求方式就为delete了-->
* </form>
*
* xml配置文件
* <!--增加一个HiddenHttpMethodFilter过滤器:目的是给普通浏览器 增加put|delete请求方式-->
* <filter>
* <filter-name>HiddenHttpMethodFilter</filter-name>
* <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
* </filter>
* <filter-mapping>
* <filter-name>HiddenHttpMethodFilter</filter-name>
* <url-pattern>/*</url-pattern>
* </filter-mapping>
*
* SpringBoot中application.properties中配置
* #开启支持put delete请求的过滤器
* spring.mvc.hiddenmethod.filter.enabled=true
*/
@GetMapping("/student/{stuId}")
public String queryStudet(@PathVariable("stuId") Integer stuId){
return "查询学生studentId=" + stuId;
}
// @GetMapping("/student/{stuName}")
// public String queryStudet(@PathVariable("stuId") String stuName){
// return "查询学生stuName=" + stuName;
// }
/***
* 创建资源 Post请求方式
* http://localhost:8080/myboot/student/zhangsan/20
*/
@PostMapping("/student/{name}/{age}")
public String createStudent(@PathVariable("name") String name,
@PathVariable("age") Integer age){
return "创建学生 student: name=" + name + ",age=" + age;
}
/**
* 更新资源
* 当路径变量名称和 形参名一样, @PathVariable中的value可以省略
*/
@PutMapping("/student/{id}/{age}")
public String modifyStudent(@PathVariable Integer id,
@PathVariable Integer age){
return "更新学生,put请求方式:id=" + id + ",age=" + age;
}
/**
* 删除资源
*/
@DeleteMapping("/student/{id}")
public String removeStudentById(@PathVariable Integer id){
return "删除学生,delete,id=" + id;
}
}
注:
1、不能使用多个,形参定义不同但url地址相同的请求,这样就报错找不到请求
如:@GetMapping("/student/{stuId}");
@GetMapping("/student/{stuName}")
http://localhost:8080/myboot/student/1002;
http://localhost:8080/myboot/student/admin
2、浏览器 form 表单只支持 GET 与 POST 请求,而DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器,可以将这些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与 DELETE 请求
<!--http请求方式-->
<form action="..." method="post">
<input type="hidden" name="_method" value="put" />
<!--value值改成delete 请求方式就为delete了-->
</form>
xml配置文件
<!--增加一个HiddenHttpMethodFilter过滤器:目的是给普通浏览器 增加put|delete请求方式-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
SpringBoot中application.properties中配置
#开启支持put delete请求的过滤器
spring.mvc.hiddenmethod.filter.enabled=true