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