SpringMVC学习笔记三:REST风格
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
- 上述行为是约定方式,约定不是规范,可以打破,所以称REST风格,而不是REST规范
- 描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例如: users、books、accounts...
实例
@Controller public class BookController { @RequestMapping(value = "/books/{id}",method = RequestMethod.DELETE) @ResponseBody public String delete(@PathVariable String id){ return "delete id = "+id; } @RequestMapping(value = "/books",method = RequestMethod.POST) @ResponseBody public String delete(){ return "save ..."; } }
//简化方案 @RestController //@Controller+@ResponseBody @RequestMapping("/books") public class BookController { //@RequestMapping(method = RequestMethod.DELETE) @DeleteMapping("/{id}") public String delete(@PathVariable String id){ return "delete id = "+id; } //@RequestMapping(method = RequestMethod.POST) @PostMapping public String save(){ return "save ..."; } }
知识点
@RequestBody @RequestParam @PathVariable 辨析
区别
- @RequestParam用于接收url地址传参或表单传参@RequestBody用于接收json数据
- @PathVariable用于接收路径参数,使用{参数名称}描述路径参数
应用
- 后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广
- 如果发送非json格式数据,选用@RequestParam接收请求参数
- 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值
测试案例
@RestController //@Controller+@ResponseBody @RequestMapping("/books") public class BookController { //@RequestMapping(method = RequestMethod.DELETE) private List<Book> books = new ArrayList<>(); @DeleteMapping("/{id}") public String delete(@PathVariable String id){ return "delete id = "+id; } //@RequestMapping(method = RequestMethod.POST) @PostMapping public String save(@RequestBody Book book){ System.out.println(book); books.add(book); return "save success..."; } @GetMapping public List<Book> getAll(){ Book book1 = new Book(); book1.setType("计算机"); book1.setName("SpringMVC"); book1.setDescription("基础"); books.add(book1); Book book2 = new Book(); book2.setType("计算机"); book2.setName("SpringMVC"); book2.setDescription("进阶"); books.add(book2); return books; } }
html等页面静态资源数据的放行
由于前面在使用过程中,设置servlet容器拦截一切访问请求
@Override protected String[] getServletMappings() { return new String[]{"/"}; }
但此时我们不需要servlet捕获页面进行处理,因此在捕获过程中需要对一些捕获的页面进行放行
//新建一个配置类:用于配置servlet直接放行的静态资源 @Configuration public class SpringMVCSupport extends WebMvcConfigurationSupport { @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { //放行webapp页面下的pages文件下的资源 registry.addResourceHandler("/pages/**").addResourceLocations("/pages/"); registry.addResourceHandler("/js/**").addResourceLocations("/js/"); registry.addResourceHandler("/css/**").addResourceLocations("/css/"); registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/"); } }
分类:
SpringMVC
标签:
Spring MVC
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现