Rest风格浅析

Rest风格浅析文章目录1、简介2、代码操作2.1、原始代码2.2、REST风格修改2.3、代码简化3、注解分析3.1、@RequestMapping3.2、@PathVariable3.3、常用注解区别1、简介REST(RepresentationalStateTransfer),表现形态状态转换。而REST风格是一种约定方式,约定不是规范,打破,因此被称为REST风格,而不是REST规范。描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而不是单个资源。传统风格资源描述形式http://

1、简介

REST(Representational State Transfer), 表现形态状态转换。而REST风格是一种约定方式,约定不是规范,打破,因此被称为REST风格,而不是REST规范。描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而不是单个资源。

  • 传统风格资源描述形式
    • http://localhost/user/getById?id=1
    • http://localhost/user/saveUser
  • REST风格描述形式
    • http://localhost/user/1
    • http://localhost/user

按照REST风格访问资源时使用行为动作区分对资源进行了一下几种操作,在REST中主要使用不同的行为动作来区分相同或相似的地址。

地址 描述 行为动作(请求方式)
http://localhost/users 查询全部用户信息 GET(查询)
http://localhost/users/1 查询指定用户信息 GET(查询)
http://localhost/users 添加用户信 POST(新增/保存)
http://localhost/users 修改用户信息 PUT(修改/更新)
http://localhost/users/1 删除用户信息 DELETE(删除)

根据REST风格对资源进行访问称为RESTful,这主要有以下优点:

  • 隐藏资源的访问行为,无法通过地址得知对资源是何种操作
  • 书写简化

2、代码操作

在下面将通过一个简单的代码根据REST风格进行修改,对REST风格做一个进一步的了解,在练习之前首先得准备好项目结构,如配置注释扫描、核心控制器DispathcerServlet的配置

2.1、原始代码

@Controller
@RequestMapping("/book")
public class BookController { 
   

    @ResponseBody
    @RequestMapping("/save")
    public String save() { 
   
        System.out.println("saving is running……");
        return "model: saving is running……";
    }

    @ResponseBody
    @RequestMapping("/delete")
    public String delete() { 
   
        System.out.println("deleting is running……");
        return "model: deleting is running……";
    }

    @ResponseBody
    @RequestMapping("/update")
    public String update(User user) { 
   
        System.out.println("updating is running……" + user);
        return "model: updating is running……" + user;
    }

    @ResponseBody
    @RequestMapping("/getById")
    public String getById(int id) { 
   
        System.out.println("getById is running……" + id);
        return "model: getById is running……" + id;
    }
}

2.2、REST风格修改

@Controller
@ResponseBody
@RequestMapping("/book")
public class BookController { 
   

    @RequestMapping(method = RequestMethod.POST)
    public String save() { 
   
        System.out.println("saving is running……");
        return "model: saving is running……";
    }

    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
    public String delete(@PathVariable int id) { 
   
        System.out.println("deleting is running……" + id);
        return "model: deleting is running……" + id;
    }

    @RequestMapping(value = "/{user}}", method = RequestMethod.PUT)
    public String update(@PathVariable User user) { 
   
        System.out.println("updating is running……" + user);
        return "model: updating is running……" + user;
    }

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public String getById(@PathVariable int id) { 
   
        System.out.println("getById is running……" + id);
        return "model: getById is running……" + id;
    }
}

2.3、代码简化

这时我们可以发现,类外面有三个注解**@Controller、@ResponseBody、 @RequestMapping**,这可以用**@RestController**代替其中的 @Controller和@ResponseBody,同时将类中的POST等请求改为相应注解

@RestController
@RequestMapping("/book")
public class BookController { 
   

    // @RequestMapping(method = RequestMethod.POST)
    @PostMapping
    public void save() { 
   
        System.out.println("saving is running……");
        // return "model: saving is running……";
    }

    // @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
    @DeleteMapping(("/{id}"))
    public String delete(@PathVariable int id) { 
   
        System.out.println("deleting is running……" + id);
        return "model: deleting is running……" + id;
    }

    // @RequestMapping(value = "/{user}}", method = RequestMethod.PUT)
    @PutMapping("/{user}")
    public String update(@PathVariable User user) { 
   
        System.out.println("updating is running……" + user);
        return "model: updating is running……" + user;
    }

    // @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    @GetMapping("/{id}")
    public String getById(@PathVariable int id) { 
   
        System.out.println("getById is running……" + id);
        return "model: getById is running……" + id;
    }
}

3、注解分析

3.1、@RequestMapping

该注解为方法注解,一般位于SpringMVC控制器方法定义的上方,主要用于设置当前控制器方法请求访问路径。

  • value(默认):请求访问路径
  • method:http请求动作,标准动作主要有GET/POST/PUT/DELETE

3.2、@PathVariable

该注解为形参注解,一般位于SpringMVC控制器方法形参定义的前面,主要用于绑定路径参数与处理器方法形参间的关系,要求路径参数名和形参名一致。

3.3、常用注解区别

在SpringMVC控制器中常见且相似的注解有 @RequestBody、@RequestParam 和 @PathVariable,他们主要有以下区别:

  • @RequestBody 用于接受json数据
  • @RequestParam 用于接受 url 地址传参或表单传参
  • @PathVariable 用于接受路径参数,使用 {参数名称}描述路径参数

各自适合的应用场景如下:

  • 后期开发中,发送请求参数超过 1 个时,以json格式为主,@RequestBody 应用较广
  • 如果发送非 json 格式数据,选用 @RequestParam 接受请求参数
  • 采用 RESTful 进行开发,当参数数量较少时,例如 1 个,可以采用 @PathVariable 接受请求路径变量,通常用于传递 id 值

今天的文章Rest风格浅析分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/8717.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注