SSM框架学习——SpringMVC之REST风格

2023-02-05 10:59:11

her~~llo,我是你们的好朋友Lyle,是名梦想成为计算机大佬的男人!

博客是为了记录自我的学习历程,加强记忆方便复习,如有不足之处还望多多包涵!非常欢迎大家的批评指正。

今天主要学习关于REST风格的知识。

目录

一、REST简介

二、RESTful入门案例

@RequestBody,@RequestParam,@Pathvariable区别与应用

三、REST快速开发

四、案例:基于RESTful页面数据交互


一、REST简介

REST (Representational State Transfer),表现形式状态转换。什么意思呢?

传统风格资源描述形式:

  • http: //localhost/user/getById?id=1
  • http: //localhost/user/saveUser

换用REST风格描述形式:

  • http: //localhost/user/1
  • http: //localhost/user

优点:

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

按照REST风格访问资源时使用行为动作区分对资源进行了何种操作

  • http://localhost/users          查询全部用户信息   GET(查询)
  • http://localhost/users/1       查询指定用户信息   GET(查询)
  • http://localhost/users           添加用户信息         POST(新增/保存)
  • http://localhost/users           修改用户信息         PUT(修改/更新)
  • http://localhost/users/1        删除用户信息         DELETE(删除)

注意:

  • 上述行为是约定方式,约定不是规范,可以打破,所以称REST风格,而不是REST规范。
  • 描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例如: users、books、accounts.....

根据REST风格对资源进行访问称为RESTful。

二、RESTful入门案例

①:设定http请求动作(动词)

@RequestMapping(value = "/users", method = RequestMethod.POST)//设置当前操作的访问路径
@ResponseBody //设置当前操作的返回值类型
public String save() {
    System.out.println("user save..");
    return "{'module':'user save'}";
}

②:设定请求参数(路径变量)

@RequestMapping(value = "/users/{id}", method = RequestMethod.DELETE)
@ResponseBody //设置当前操作的返回值类型
public String delete(@PathVariable Integer id) {
    System.out.println("delete  " + id);
    return "{'module':'delete  " + id + "'} ";
}

名称:@RequestMapping

类型:方法注解
位置:SpringMVC控制器方法定义上方

作用:设置当前控制器方法请求访问路径
属性:

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

@RequestBody,@RequestParam,@Pathvariable区别与应用

区别:

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

应用:

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

三、REST快速开发

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

    //    @RequestMapping(method = RequestMethod.POST)
    @PostMapping
    public String save() {
        System.out.println("book save..");
        return "{'module':'book save'}";
    }

    //    @RequestMapping(method = RequestMethod.PUT)
    @PutMapping
    public String update(@RequestBody Book book) {
        System.out.println("book update..");
        return "{'module':'book update'}" + book;
    }

    //    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
    @DeleteMapping("/{id}")
    public String delete(@PathVariable Integer id) {
        System.out.println("book delete  " + id);
        return "{'module':'book delete  " + id + "'} ";
    }

    //    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    @GetMapping("/{id}")
    public String getById(@PathVariable Integer id) {
        System.out.println("book get  " + id);
        return "{'module':'book get  " + id + "'} ";
    }

    //    @RequestMapping(method = RequestMethod.GET)//设置当前操作的访问路径
    @GetMapping
    @ResponseBody //设置当前操作的返回值类型
    public String getAll() {
        System.out.println("get all books ");
        return "{'module':'get all books '} ";
    }
}

名称:@RestController

类型:类注解
位置:基于SpringMVC的RESTful开发控制器类定义上方
作用:设置当前控制器类为RESTful风格,等同于@Controller与@ResponseBody两个注解组合功能


名称:@GetMapping @PostMapping @PutMapping @DeleteMapping

类型:方法注解
位置:基于SpringMVC的RESTful开发控制器方法定义上方
作用:设置当前控制器方法请求访问路径与请求动作,每种对应一个请求动作,例如@GetMapping对应GET请求
属性:value(默认):请求访问路径

四、案例:基于RESTful页面数据交互

①:制作SpringMVC控制器,并通过PostMan测试接口功能

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

    @PostMapping
    public String save(@RequestBody Book book) {
        System.out.println("book save" + book);
        return "{'module':'book save'}" + book;
    }

    @GetMapping
    public List<Book> getAll() {
        List<Book> bookList =new ArrayList<>();
        Book book1 = new Book();
        book1.setName("我是神");
        book1.setPrice(60.00);
        book1.setId(1);
        book1.setType("玄幻");

        Book book2 = new Book();
        book2.setName("明朝那些事儿");
        book2.setPrice(35.00);
        book2.setId(2);
        book2.setType("历史");


        bookList.add(book1);
        bookList.add(book2);

        return bookList;
    }
}

②:设置对静态资源的访问放行,再SpringMvcConfig要扫到这个类

@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        //当访问/pages/???时走/pages目录下内容
        registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
        registry.addResourceHandler("/css/**").addResourceLocations("/css/");
        registry.addResourceHandler("/js/**").addResourceLocations("/js/");
        registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
    }
}

③:前端页面通过异步提交访问后台控制器

结语:

REST风格的学习到此结束,我是Lyle,我们下次继续深入学习SpringMVC。

  • 作者:程序员Lyle
  • 原文链接:https://blog.csdn.net/weixin_58035422/article/details/125790843
    更新时间:2023-02-05 10:59:11