RestFul风格的开发
1、REST风格
根据REST风格对资源进行访问称为restful
描述模块通常使用复数表示某类资源
每个控制器方法前都有这两个注解:
@RequestMapping(value = "/users/{id}/{name}",method = RequestMethod.DELETE)
;@ResponseBody
;重复性太高
解决:
- 将@RequestMapping放在类上,定义所有方法共同的访问路径
- 使用@GetMapping @PostMapping @PutMapping @DeleteMapping代替
将ResponseBody提到类上面,让所有的方法都有@ResponseBody的功能;使用@RestController注解替换@Controller+@ResponseBody
例子:
http://localhost/users
查询全部用户信息 GET(查询)http://localhost/users/1
查询指定用户信息 GET(查询)http://localhost/users
添加用户信息 POST(新增/保存)http://localhost/users
修改用户信息 PUT(修改/更新)http://localhost/users/1
删除用户信息 DELETE(删除)
@RestController
public class UserController {
@GetMapping(""/users/{id}/{name}"")
public String getInfo(@PathVariable("id") Integer id,@PathVariable("name") String name) {
return "{'module':'user delete',json}";
}
}
2、一般风格
当前端的请求地址有参数时:
http://localhost/users/1/lm
@Controller
public class UserController {
@RequestMapping(value = "/save",method = RequestMethod.POST)
@ResponseBody
public String save(@RequestBody User user) {
System.out.println("user save..."+user);
return "{'module':'user save'}";
}
@RequestMapping(value = "/users/{id}/{name}",method = RequestMethod.DELETE)
@ResponseBody
public String delete(@PathVariable("id") Integer id,@PathVariable("name") String name) {
System.out.println("user delete "+id+":"+name);
return "{'module':'user delete',json}";
}
}
3、注解说明
@RestController
- 基于SpringMVC的RESTful开发控制器类定义上方
- @Controller+@ResponseBody
@GetMapping @PostMapping @PutMapping @DeleteMapping
- 基于SpringMVC的RESTful开发控制器方法定义上方,设置当前控制器方法请求的访问路径与请求动作
- value(默认):请求访问路径
@PathVariable
- SpringMVC控制器方法的形参前面
- 绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应
4、依赖说明
jackson-databind
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
- Jackson JSON处理库的一部分,用于在Java中处理JSON数据的工具包。
- 它提供一组类和方法,用于将Java对象转换为JSON格式,以及将JSON格式转换回Java对象;使用这个包,可以很方便地在Java应用程序中处理JSON数据,包括序列化和反序列化对象、处理JSON数据流等操作。
5、访问静态资源
pages\books.html
浏览器输入
http://localhost/pages/books.html
SpringMVC拦截静态资源,SpringMVC根据地址去controller找对应的方法,找不到报404
解决:
- 对静态资源的访问,不要过springmvc,交给tomcat处理:配置SpringMVC,将静态资源进行放行
- 要使配置类生效需要修改配置类的扫描路径
protected String[] getServletMappings() {
return new String[]{"/"}; //http://localhost/pages/books.html满足这个规则
}
@Configuration //设置静态资源访问过滤,当前类需要设置为配置类,并被扫描加载
public class SpringMvcSupport extends WebMvcConfigurationSupport {
@Override
protected 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/");
}
}
@Configuration
@ComponentScan({"com.itheima.controller","com.itheima.config"})
@EnableWebMvc
public class SpringMvcConfig {
}
@Configuration
@ComponentScan("com.itheima")
@EnableWebMvc
public class SpringMvcConfig {
}