> 文章列表 > REST风格和使用RESTful形式开发

REST风格和使用RESTful形式开发

REST风格和使用RESTful形式开发

系列文章目录

主要学习SpringMVC中REST风格的开发形式


文章目录

  • 系列文章目录
  • 前言
  • 一、REST简介
  • 二、RESTful入门案例
  • 三、REST快速开发
  • 四、案例:基于RESTful页面数据交互
  • 总结

前言

本节中用到的资料
链接:https://pan.baidu.com/s/1tSUMxH7G3-BX9MNnoVSw6Q?pwd=1111
提取码:1111


一、REST简介

REST风格和使用RESTful形式开发

REST风格和使用RESTful形式开发

二、RESTful入门案例

REST风格和使用RESTful形式开发
REST风格和使用RESTful形式开发
REST风格和使用RESTful形式开发

REST风格和使用RESTful形式开发
REST风格和使用RESTful形式开发

项目结构
REST风格和使用RESTful形式开发
UserController

package org.example.controller;import org.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;//2.定义Controller
//2.1使用@Controller定义Bean
@Controller
public class UserController {//2.2当前访问路径@RequestMapping(value = "/users",method = RequestMethod.POST)//2.3设置当前操作的返回值类型@ResponseBodypublic String save(){System.out.println("user save ..");return "{'module':'user save'}";}@RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE)@ResponseBodypublic String delete(@PathVariable Integer id){System.out.println("user delete..."+id);return "{'module':'user delete'}";}@RequestMapping(value = "/users",method = RequestMethod.PUT)@ResponseBodypublic String update(@RequestBody User user){System.out.println("user update..."+user);return "{'module':'user update'}";}@RequestMapping(value = "/users/{id}",method = RequestMethod.GET)@ResponseBodypublic String getById(@PathVariable Integer id){System.out.println("user getById..."+id);return "{'module':'user getById'}";}@RequestMapping(value = "/users",method = RequestMethod.GET)@ResponseBodypublic String getAll(){System.out.println("user getAll...");return "{'module':'user All'}";}
}

User

package org.example.domain;public class User {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\\'' +", age=" + age +'}';}
}

ServletContainersInitConfig

package org.example.config;import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;import javax.servlet.Filter;public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{protected Class<?>[] getRootConfigClasses() {return new Class[]{SpringMvcConfig.class};}protected Class<?>[] getServletConfigClasses() {return new Class[0];}protected String[] getServletMappings() {return new String[]{"/"};}//乱码处理@Overrideprotected Filter[] getServletFilters() {CharacterEncodingFilter filter=new CharacterEncodingFilter();filter.setEncoding("UTF-8");return new Filter[]{};}
}/*
//4.定义一个Servlet容器启动的配置类,在里面加载Spring的配置
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {//加载SpringMVC容器配置protected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext ctx=new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);return ctx;}//设置哪些请求归属SpringMVC处理protected String[] getServletMappings() {return new String[]{"/"};}//加载Spring容器配置protected WebApplicationContext createRootApplicationContext() {return null;}
}
*/

SpringMvcConfig

package org.example.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;//3.加载SpringMVC的配置文件,加载Controller对应的Bean
@Configuration
@ComponentScan("org.example")
@EnableWebMvc
public class SpringMvcConfig {
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>springmvc-01-quickstart</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><dependencies><!--1.导入Servlet与SpringMVC的坐标--><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.21</version></dependency><!--导入JSON相关的坐标--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.3</version></dependency></dependencies>
</project>

三、REST快速开发

REST风格和使用RESTful形式开发
REST风格和使用RESTful形式开发
项目结构
REST风格和使用RESTful形式开发

前面的代码都一样,新增BookController类

package org.example.controller;import org.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;/*@Controller
@ResponseBody*/
//这俩个注解合为@RestController
@RestController
@RequestMapping("/books")
public class BookController {//@RequestMapping(method = RequestMethod.POST)等价于@PostMapping@PostMappingpublic String save(){System.out.println("book save ..");return "{'module':'book save'}";}//@RequestMapping(value = "/{id}",method = RequestMethod.DELETE)@DeleteMapping("/{id}")public String delete(@PathVariable Integer id){System.out.println("book delete..."+id);return "{'module':'book delete'}";}//    @RequestMapping(method = RequestMethod.PUT)@PutMappingpublic String update(@RequestBody User user){System.out.println("book update..."+user);return "{'module':'book update'}";}//    @RequestMapping(value = "/{id}",method = RequestMethod.GET)@GetMapping("/{id}")public String getById(@PathVariable Integer id){System.out.println("book getById..."+id);return "{'module':'book getById'}";}//    @RequestMapping(method = RequestMethod.GET)@GetMappingpublic String getAll(){System.out.println("book getAll...");return "{'module':'book All'}";}
}

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

REST风格和使用RESTful形式开发

REST风格和使用RESTful形式开发
REST风格和使用RESTful形式开发

项目结构
REST风格和使用RESTful形式开发

实现代码
ServletContainersInitConfig 类

package org.example.config;import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;import javax.servlet.Filter;public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{protected Class<?>[] getRootConfigClasses() {return new Class[]{SpringMvcConfig.class};}protected Class<?>[] getServletConfigClasses() {return new Class[0];}protected String[] getServletMappings() {return new String[]{"/"};}//乱码处理@Overrideprotected Filter[] getServletFilters() {CharacterEncodingFilter filter=new CharacterEncodingFilter();filter.setEncoding("UTF-8");return new Filter[]{};}
}/*
//4.定义一个Servlet容器启动的配置类,在里面加载Spring的配置
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {//加载SpringMVC容器配置protected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext ctx=new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);return ctx;}//设置哪些请求归属SpringMVC处理protected String[] getServletMappings() {return new String[]{"/"};}//加载Spring容器配置protected WebApplicationContext createRootApplicationContext() {return null;}
}
*/

SpringMvcConfig

package org.example.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;//3.加载SpringMVC的配置文件,加载Controller对应的Bean
@Configuration
@ComponentScan("org.example")
@EnableWebMvc
public class SpringMvcConfig {
}

SpringMvcSupport

package org.example.config;import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;//放行静态资源
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {@Overrideprotected void addResourceHandlers(ResourceHandlerRegistry registry) {//当访问/page/的时候,走/page目录下的内容registry.addResourceHandler("/pages/").addResourceLocations("/pages/");registry.addResourceHandler("/js/").addResourceLocations("/js/");registry.addResourceHandler("/css/").addResourceLocations("/css/");registry.addResourceHandler("/plugins/").addResourceLocations("/plugins/");}
}

BookController

package org.example.controller;import org.example.domain.Book;
import org.springframework.web.bind.annotation.*;import java.util.ArrayList;
import java.util.List;@RestController
@RequestMapping("/books")
public class BookController {@PostMappingpublic String save(@RequestBody Book book){System.out.println("book save ==>"+book);return "{'module':'book save success'}";}@GetMappingpublic List<Book> getAll(){System.out.println("book getAll is running...");List<Book> bookList=new ArrayList<Book>();Book book1=new Book();book1.setType("计算机");book1.setName("SpringMVC入门教程");book1.setDescription("小试牛刀");bookList.add(book1);Book book2=new Book();book2.setType("计算机");book2.setName("SpringMVC实战教程");book2.setDescription("一代宗师");bookList.add(book2);return bookList;}
}

Book

package org.example.domain;public class Book {private int id;private String type;private String name;private String description;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}@Overridepublic String toString() {return "Book{" +"id=" + id +", type='" + type + '\\'' +", name='" + name + '\\'' +", description='" + description + '\\'' +'}';}
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>springmvc-02-rest-case</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><dependencies><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.21</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.3</version></dependency></dependencies></project>

静态页面在资料的day02\\资源\\REST功能页面中


总结

本节主要了解了REST开发的风格和用RESTful开发的一个小案例

参考视频