RESTful
Representational State Transfer 表现形式状态转换

简化路径的同时隐藏访问行为更安全
传参
//设置当前请求方法为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加载:
静态资源:

@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/");
}
}