SpringBoot 精通系列-构建一个RESTful Web 服务

「爱情、让人受尽委屈。」 2024-04-18 14:11 213阅读 0赞

导语
  现在越来越多的企业推荐使用的是RESTful风格来构建企业应用接口,那么什么是RESTful呢?

文章目录

    • 什么是RESTful
    • SpringBoot对于RESTful有哪些支持
    • 快速实例
        • 定义User对象
        • 添加配置文件
        • 编写Dao层的Mapper
        • 编写Service层
        • Controller类
        • Mapper XML 配置
      • 测试效果
    • 总结

什么是RESTful

  RESTful是目前最为流行的一种互联网架构,REST(Respresentational State Transfer,表述性状态转移),这个是来源自于一篇博士论文,定义了作者对于互联网软件的架构原则的认识,如果一个架构符合REST原则,则称它为RESTFul架构。
  RESTful架构一个比较核心的概念就是”资源(Resource)“,从RESTful的角度上来看,网络中的任何的东西都可以是被看作是一个资源,对于一个资源来说可以一个文件、一张图片等等,对于每一个在网络中的资源来说都有一个特定的位置标识URI(统一资源定位符)。通过这URI就可以访问到这资源。
  对于一个资源来说可以有多种形式,也就是对于资源的描述,对于资源的描述来说就取决于它的后缀名称。也就是说URI只是代表了一个实体,而不是它的表现形式。
  互联网中,客户端与服务器端之间互动传递消息,这些消息其实就是在传递互联网中资源的描述,客户端告诉服务端想要什么地方的资源,服务端向客户端返回对应的资源。在互联网中相互之间的调用只能通过一种无状态协议就是HTTP。也就是说服务端必须保存所有的状态,客户端可以使用HTTP的基本操作让服务端的资源状态发生变化,也就是所谓的”表述性状态转移“。

SpringBoot对于RESTful有哪些支持

  在SpringBoot出现之前,SpringMVC就对于一些简单的RESTFul进行了支持,通过不同的注解来支持前端的请求,当然SpringBoot提供的注解要比SpringMVC更加的全面。SpringBoot提供一些组合注解。通过这些组合注解来简化常用的HTTP方法请求映射。并且更好的体现了见名知意。

  • @GetMapping;处理GET请求
  • @PostMapping; 处理POST请求
  • @PutMapping; 处理PUT请求
  • @DeleteMapping;处理DELETE请求
  • @PatchMapping; 处理更新资源请求

当然了以上这些注解都是简写版本,在SpringBoot中进行了封装

@GetMapping

  1. @RequestMapping(method = RequestMethod.GET)
  2. public @interface GetMapping {

@PostMapping

  1. @RequestMapping(method = RequestMethod.POST)
  2. public @interface PostMapping {

@PutMapping

  1. @RequestMapping(method = RequestMethod.PUT)
  2. public @interface PutMapping { \

@DeleteMapping

  1. @RequestMapping(method = RequestMethod.DELETE)
  2. public @interface DeleteMapping {

@PatchMapping

  1. @RequestMapping(method = RequestMethod.PATCH)
  2. public @interface PatchMapping {

快速实例

  这里使用整合MyBaits的方式来实现这功能。

定义User对象

  1. public class User {
  2. private Integer id;
  3. private String name;
  4. private String password;
  5. public Integer getId() {
  6. return id;
  7. }
  8. public void setId(Integer id) {
  9. this.id = id;
  10. }
  11. public String getName() {
  12. return name;
  13. }
  14. public void setName(String name) {
  15. this.name = name;
  16. }
  17. public String getPassword() {
  18. return password;
  19. }
  20. public void setPassword(String password) {
  21. this.password = password;
  22. }
  23. }

添加配置文件

  1. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  2. spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
  3. spring.datasource.username=root
  4. spring.datasource.password=123456
  5. mybatis.mapper-locations=classpath:/mapper/**/*.xml
  6. mybatis.configuration.map-underscore-to-camel-case=true

编写Dao层的Mapper

  1. @Mapper
  2. public interface UserMapper {
  3. public int addUser(User user);
  4. public List<User> getAllUser();
  5. public User getUser(Integer id);
  6. public int updateUser(User user);
  7. public int deleteUser(Integer id);
  8. }

编写Service层

  1. public interface UserService {
  2. public int addUser(User user);
  3. public List<User> getAllUser();
  4. public User getUserById(Integer id);
  5. public int updateUser(User user);
  6. public int deleteUserById(Integer id);
  7. }

Service实现类

  1. @Service
  2. public class UserServiceImpl implements UserService {
  3. @Autowired
  4. private UserMapper userMapper;
  5. @Override
  6. public int addUser(User user) {
  7. return userMapper.addUser(user);
  8. }
  9. @Override
  10. public List<User> getAllUser() {
  11. return userMapper.getAllUser();
  12. }
  13. @Override
  14. public User getUserById(Integer id) {
  15. return userMapper.getUser(id);
  16. }
  17. @Override
  18. public int updateUser(User user) {
  19. return userMapper.updateUser(user);
  20. }
  21. @Override
  22. public int deleteUserById(Integer id) {
  23. return userMapper.deleteUser(id);
  24. }
  25. }

Controller类

  1. @RestController
  2. public class UserController {
  3. @Autowired
  4. private UserService userService;
  5. @GetMapping("/allUser")
  6. public List<User> getAllUser(){
  7. return userService.getAllUser();
  8. }
  9. @GetMapping("/getOneUser")
  10. public User getUserById(@RequestParam Integer id){
  11. return userService.getUserById(id);
  12. }
  13. @PostMapping("/addUser")
  14. public int addUser(@RequestBody User user){
  15. return userService.addUser(user);
  16. }
  17. @DeleteMapping("/deleteUser")
  18. public int deleteUser(Integer id){
  19. return userService.deleteUserById(id);
  20. }
  21. @PatchMapping("/updateUser")
  22. public int updateUser(@RequestBody User user){
  23. return userService.updateUser(user);
  24. }
  25. }

Mapper XML 配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.nh.restful.dao.UserMapper">
  4. <select id="getAllUser" resultType="com.nh.restful.bean.User">
  5. select * from user;
  6. </select>
  7. <select id="getUser" parameterType="Integer" resultType="com.nh.restful.bean.User">
  8. select * from user where id = #{id}
  9. </select>
  10. <insert id="addUser" parameterType="com.nh.restful.bean.User">
  11. insert into user ( `id`, `name`, `password`) values ( #{id}, #{name}, #{password});
  12. </insert>
  13. <delete id="deleteUser" parameterType="Integer">
  14. delete from user where id = #{id}
  15. </delete>
  16. <update id="updateUser" parameterType="com.nh.restful.bean.User">
  17. update user set `id`= #{id}, `name`= #{name}, `password`= #{password} where `id` = #{id};
  18. </update>
  19. </mapper>

测试效果

从浏览器发送get请求测试get请求的方式
在这里插入图片描述

在这里插入图片描述

PostMan测试Post、DELETE、Patch请求方式
效果如下

Post
在这里插入图片描述
Delete
在这里插入图片描述

Patch
在这里插入图片描述

总结

  从上面的例子可以看出,RESTful其实是一个非常好的设计方式,相同的URL请求通过后端不同的处理方式利用RESTful风格很容易就实现一种简单的接口调用方式。同时SpringBoot在对于RESTful的支持上做了大量的优化,从注解的表现形式,到内部使用的RESTful支持。后面的分享中还会有更多的东西等着大家,希望大家可以喜欢!

发表评论

表情:
评论列表 (有 0 条评论,213人围观)

还没有评论,来说两句吧...

相关阅读