SpringMVC学习笔记(四)RESTful

RESTful

Representational State Transfer 表现形式状态转换

image-20230312111458428

简化路径的同时隐藏访问行为更安全

传参

 //设置当前请求方法为DELETE,表示REST风格中的删除操作
 //@PathVariable注解用于设置路径变量(路径参数),要求路径上设置对应的占位符,并且占位符名称与方法形参名称相同
 @RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE)
 @ResponseBody
 public String delete(@PathVariable Integer id){
     System.out.println("user delete..." + id);
     return "{'module':'user delete'}";
 }

区分@RequestParam@RequestBody@PathVariable注解

  • 区别
    • @RequestParam用于接收url地址传参或表单传参
    • @RequestBody用于接收json数据
    • @PathVariable用于接收路径参数,使用{参数名称}描述路径参数
  • 应用
    • 后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广
    • 如果发送非json格式数据,选用@RequestParam接收请求参数
    • 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值

快速开发

简化注解

 //简化前
 @Controller
 public class UserController{
     @RequestMapping(value="/books",method=RequestMethod.POST)
     @ResponseBody
     public String save(@RequestBody Book book){
         return "{'module':'book save'}";
    }
 }
 //简化后
 //@RestController相当于@Controller+@ResponseBody
 @RestController
 @RequestMapping("/books")
 public class UserController{
     //@RequestMapping(value="/books",method=RequestMethod.POST)
     @PostMapping
     public String save(@RequestBody Book book){
         return "{'module':'book save'}";
    }
 }
页面访问处理⭐

ServletContainersInitConfig中,把所有路径下的资源都交给springmvc访问了,所以web页面等静态资源也会被springmvc拦截,无法正常加载,所以需要进行配置,对静态资源进行放行,由tomcat加载:

静态资源:

image-20230312170451723
 @Configuration
 public class SpringMvcSupport extends WebMvcConfigurationSupport {
     @Override
     protected void addResourceHandlers(ResourceHandlerRegistry registry) {
         //**是Ant风格通配符,/pages/** 表示匹配以 /pages/开头的任意路径
         registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
         registry.addResourceHandler("/js/**").addResourceLocations("/js/");
         registry.addResourceHandler("/css/**").addResourceLocations("/css/");
         registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
    }
 }
 ​
 ​
 ​
 @Configuration
 @ComponentScan({"com.yuan.controller","com.yuan.config"})
 @EnableWebMvc
 public class SpringMvcConfig {
 }

注意:在SpringMvcConfig中不能使用@Import注解导入SpringMvcSupport配置文件,因为:SpringMvcSupport扩展了WebMvcConfigurationSupport接口,而SpringMvcConfig中使用了@EnableWebMvc注解,这两个东西同时存在会起冲突,@EnableWebMvc会重写所有WebMvcConfigurationSupport里的配置导致SpringMvcSupport失效。解决方法除了上面的,还可以直接把SpringMvcSupport的配置内容写在SpringMvcConfig里:

 @Configuration
 @ComponentScan("com.yuan.controller")
 @EnableWebMvc
 public class SpringMvcConfig extends WebMvcConfigurerAdapter {
     @Override
     public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
    }
 }

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注