怎呀做网站,深圳网站建设联雅网络,广告联盟平台排名,做网站需要了解的东西文章目录 REST风格1 REST简介问题导入1.1 REST介绍1.2 RESTful介绍1.3 注意事项 2 RESTful入门案例问题导入2.1 快速入门2.2 PathVariable介绍2.3 RequestBody、RequestParam、PathVariable区别和应用 3 REST快速开发【重点】3.1 代码中的问题3.2 Rest快速开发 4案例#xff1… 文章目录 REST风格1 REST简介问题导入1.1 REST介绍1.2 RESTful介绍1.3 注意事项 2 RESTful入门案例问题导入2.1 快速入门2.2 PathVariable介绍2.3 RequestBody、RequestParam、PathVariable区别和应用 3 REST快速开发【重点】3.1 代码中的问题3.2 Rest快速开发 4案例基于RESTful页面数据交互4.1 案例效果和环境准备4.1.1 案例效果4.1.2 环境准备 4.2 代码实现4.2.1 制作SpringMVC控制器并通过PostMan测试接口功能4.2.2 设置对静态资源的访问放行4.2.3 前端页面通过异步提交访问后台控制器 REST风格
1 REST简介
问题导入
Rest风格使用了几种请求方式定义访问行为
答四种GET,POST,PUT,DELETE
1.1 REST介绍
RESTRepresentational State Transfer表现形式状态转换 传统风格资源描述形式 http://localhost/user/getById?id1 http://localhost/user/saveUserREST风格描述形式 http://localhost/user/1 http://localhost/user 优点 隐藏资源的访问行为无法通过地址得知对资源是何种操作书写简化
1.2 RESTful介绍
按照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
1.3 注意事项
上述行为是约定方式约定不是规范可以打破所以称REST风格而不是REST规范描述模块的名称通常使用复数也就是加s的格式描述表示此类资源而非单个资源例如users、books、accounts……
2 RESTful入门案例
问题导入
Rest风格如何通过路径传递参数
2.1 快速入门 做法在Controller中定义方法时设定http请求动作(请求方式)“和设定请求参数路径变量” Controller
public class UserController {//设置当前请求方法为POST表示REST风格中的添加操作RequestMapping(value /users,method RequestMethod.POST)ResponseBodypublic String save(){System.out.println(user save...);return {module:user save};}//设置当前请求方法为DELETE表示REST风格中的删除操作//PathVariable注解用于设置路径变量路径参数要求路径上设置对应的占位符并且占位符名称与方法形参名称相同RequestMapping(value /users/{id},method RequestMethod.DELETE)ResponseBodypublic String delete(PathVariable Integer id){System.out.println(user delete... id);return {module:user delete};}//设置当前请求方法为PUT表示REST风格中的修改操作RequestMapping(value /users,method RequestMethod.PUT)ResponseBodypublic String update(RequestBody User user){System.out.println(user update...user);return {module:user update};}//设置当前请求方法为GET表示REST风格中的查询操作//PathVariable注解用于设置路径变量路径参数要求路径上设置对应的占位符并且占位符名称与方法形参名称相同RequestMapping(value /users/{id} ,method RequestMethod.GET)ResponseBodypublic String getById(PathVariable Integer id){System.out.println(user getById...id);return {module:user getById};}//设置当前请求方法为GET表示REST风格中的查询操作RequestMapping(value /users,method RequestMethod.GET)ResponseBodypublic String getAll(){System.out.println(user getAll...);return {module:user getAll};}
}2.2 PathVariable介绍
名称PathVariable类型形参注解位置SpringMVC控制器方法形参定义前面作用绑定路径参数与处理器方法形参间的关系要求路径参数名与形参名一一对应 2.3 RequestBody、RequestParam、PathVariable区别和应用
区别 RequestParam用于接收url地址传参或表单传参 RequestBody用于接收json数据 PathVariable用于接收路径参数使用{参数名称}描述路径参数应用 后期开发中发送请求参数超过1个时以json格式为主RequestBody应用较广 如果发送非json格式数据选用RequestParam接收请求参数 采用RESTful进行开发当参数数量较少时例如1个可以采用PathVariable接收请求路径变量通常用于传递id值
3 REST快速开发【重点】
3.1 代码中的问题 以上截图中的代码和我们之前写的UserController中的方法类似其中图中两个方法都有三处是有问题的可以进行优化。存在的问题如下 问题1每个方法的RequestMapping注解中都定义了访问路径/books重复性太高。
问题2每个方法的RequestMapping注解中都要使用method属性定义请求方式重复性太高。
问题3每个方法响应json都需要加上ResponseBody注解重复性太高。
3.2 Rest快速开发 解决以上三个问题 解决问题1在Controller类上使用RequestMapping定义共同的访问路径。
Controller
RequestMapping(/books)
public class BookController {RequestMapping(method RequestMethod.POST)public String save(RequestBody Book book){System.out.println(book save... book);return {module:book save};}RequestMapping(value /{id} ,method RequestMethod.DELETE)public String delete(PathVariable Integer id){System.out.println(book delete... id);return {module:book delete};}RequestMapping(method RequestMethod.PUT)public String update(RequestBody Book book){System.out.println(book update...book);return {module:book update};}RequestMapping(value /{id} ,method RequestMethod.GET)public String getById(PathVariable Integer id){System.out.println(book getById...id);return {module:book getById};}RequestMapping(method RequestMethod.GET)public String getAll(){System.out.println(book getAll...);return {module:book getAll};}
}解决问题2使用GetMapping PostMapping PutMapping DeleteMapping代替RequestMapping(methodRequestMethod.XXX)
Controller
RequestMapping(/books)
public class BookController {// RequestMapping( method RequestMethod.POST)PostMapping//使用PostMapping简化Post请求方法对应的映射配置public String save(RequestBody Book book){System.out.println(book save... book);return {module:book save};}// RequestMapping(value /{id} ,method RequestMethod.DELETE)DeleteMapping(/{id}) //使用DeleteMapping简化DELETE请求方法对应的映射配置public String delete(PathVariable Integer id){System.out.println(book delete... id);return {module:book delete};}// RequestMapping(method RequestMethod.PUT)PutMapping //使用PutMapping简化Put请求方法对应的映射配置public String update(RequestBody Book book){System.out.println(book update...book);return {module:book update};}// RequestMapping(value /{id} ,method RequestMethod.GET)GetMapping(/{id}) //使用GetMapping简化GET请求方法对应的映射配置public String getById(PathVariable Integer id){System.out.println(book getById...id);return {module:book getById};}// RequestMapping(method RequestMethod.GET)GetMapping //使用GetMapping简化GET请求方法对应的映射配置public String getAll(){System.out.println(book getAll...);return {module:book getAll};}
}名称GetMapping PostMapping PutMapping DeleteMapping类型方法注解位置基于SpringMVC的RESTful开发控制器方法定义上方作用设置当前控制器方法请求访问路径与请求动作每种对应一个请求动作例如GetMapping对应GET请求属性 value默认请求访问路径
解决问题3在Controller类上使用RestController注解等同于Controller与ResponseBody两个注解组合功能
RestController //使用RestController注解替换Controller与ResponseBody注解简化书写
RequestMapping(/books)
public class BookController {//方法省略了没写
}名称RestController类型类注解位置基于SpringMVC的RESTful开发控制器类定义上方作用设置当前控制器类为RESTful风格等同于Controller与ResponseBody两个注解组合功能
4案例基于RESTful页面数据交互
4.1 案例效果和环境准备
4.1.1 案例效果 4.1.2 环境准备
//POJO实体类
public class Book {private Integer id;private String type;private String name;private String description;//同学们自己重写getter、setter、toString()方法...
}//SpringMVC容器初始化类
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {protected Class?[] getRootConfigClasses() {return new Class[0];}protected Class?[] getServletConfigClasses() {return new Class[]{SpringMvcConfig.class};}protected String[] getServletMappings() {return new String[]{/};}//乱码处理Overrideprotected Filter[] getServletFilters() {CharacterEncodingFilter filter new CharacterEncodingFilter();filter.setEncoding(UTF-8);return new Filter[]{filter};}
}//SpringMVC配置类
Configuration
ComponentScan({com.nuage.controller,com.nuage.config})
EnableWebMvc
public class SpringMvcConfig {
}4.2 代码实现
4.2.1 制作SpringMVC控制器并通过PostMan测试接口功能
RestController
RequestMapping(/books)
public class BookController {PostMappingpublic String save(RequestBody Book book){System.out.println(book save book);return {module:book save success};}GetMappingpublic ListBook getAll(){System.out.println(book getAll is running ...);ListBook bookList new ArrayListBook();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);Book book3 new Book();book3.setType(计算机丛书);book3.setName(SpringMVC实战教程进阶);book3.setDescription(一代宗师呕心创作);bookList.add(book3);return bookList;}
}4.2.2 设置对静态资源的访问放行
Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {//设置静态资源访问过滤当前类需要设置为配置类并被扫描加载Overrideprotected void addResourceHandlers(ResourceHandlerRegistry registry) {//当访问/pages/????时候从/pages目录下查找内容registry.addResourceHandler(/pages/**).addResourceLocations(/pages/);registry.addResourceHandler(/js/**).addResourceLocations(/js/); registry.addResourceHandler(/css/**).addResourceLocations(/css/); registry.addResourceHandler(/plugins/**).addResourceLocations(/plugins/);}
}4.2.3 前端页面通过异步提交访问后台控制器
//添加
saveBook () {axios.post(/books,this.formData).then((res){});
},
//主页列表查询
getAll() {axios.get(/books).then((res){this.dataList res.data;});
},