1 什么是RESTFul
-
RESTFul编写程序一种风格,不是协议。
-
对HTTP协议诠释(落地方案),请求方式的落地
-
http协议共8种
序号 | 方法 | 描述 |
1 | GET | 请求指定页面信息。请求数据放在协议头中,返回实体主体 |
2 | POST | 提交资源,让服务器进行处理,如表单数据或图片数据,提交的数据放在请求体中。内容可能会被修改 |
3 | PUT | 与POST相同,用于发送资源与服务器,储存在服务器的指定位置,同时PUT是安全的,无论请求多少次都是在同一资源上修改 |
4 | DELETE | 请求服务器删除指定的资源或页面,建议使用https协议,否则可能被防火墙拦截, |
5 | HEAD | 只请求页面的头部信息,用于检查该链解决是否可以使用 |
6 | OPTION | 允许客户端查看服务器的性能,以及获取服务器支持的HTTP请求方法; |
7 | TRACE | 回显服务器收到的请求,返回得到的部分内容 |
8 | CONNECT | 建立一个对资源的网络连接。建立连接后,会响应一个200状态码和一条"Connectioin Established"的消息。 |
1.1常用的http协议有4种
get
post
put
delete
RESTFul对服务器程序操作,进行约定。
-
每一个操作组成:请求路径 + 请求方式 。 (一个路径,因为请求方式的不同,可以完成不同操作)
-
数据传输方式:JSON数据
// 传统开发路径
查询:http://localhost:8080/user/selectAll.action
添加:http://localhost:8080/user/addUser.action
修改:http://localhost:8080/user/updateUser.action
删除:http://localhost:8080/user/deleteUser.action
// RESTFul风格路径
查询:get http://localhost:8080/user/
详情:get http://localhost:8080/user/123
添加:post http://localhost:8080/user/
修改:put http://localhost:8080/user/
删除:delete http://localhost:8080/user/123
2.使用
2.1 步骤
-
步骤1:创建新项目 (mvc_restful)
-
步骤2:导入jar包:spring 、spring mvc、jackson、mybatis
-
步骤3:配置类,
-
spring mvc 配置
-
启动配置类,前端控制器没有扩展名,由
*.action
改成/
-
-
步骤4:编写controller,完成增删改查
4.1 类级别:
@Controller 、@ResponseBody
//--> 合成注入
@RestController
4.2 方法级别:@RequestMapping(value="路径", method=RequestMethod.GET /POST/PUT/DELETE)
//传统写法
@RequestMapping(value="路径", method=RequestMethod.GET /POST/PUT/DELETE)
//-->各种请求方式的简化写法
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PathVariable //用于获得路径参数
4.3 方法返回值
//根据约束,基于RESTFul风格,方法的的返回值,建议使用 ResponseEntity 类型
// ResponseEntity 用于封装返回值信息,含状态码
// 返回200状态码,ResponseEntity.ok("添加成功");
// 其他状态码,new ResponseEntity<>("添加成功", HttpStatus.UNAUTHORIZED)
3.实现
3.1配置类
package com.czxy.config;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;
import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
public class WebInitializer1 implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
//1 配置spring工厂
AnnotationConfigWebApplicationContext application = new AnnotationConfigWebApplicationContext();
// 注册所有的配置类
application.register(MvcConfiguration1.class);
//2 post中文乱码
FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encoding", new CharacterEncodingFilter("UTF-8"));
encodingFilter.addMappingForUrlPatterns(null, true, "/*");
//3 核心控制器
ServletRegistration.Dynamic mvcServlet = servletContext.addServlet("springmvc", new DispatcherServlet(application));
mvcServlet.addMapping("/");
mvcServlet.setLoadOnStartup(2); //tomcat启动时,执行servlet的初始化方法
}
}
3.2控制器
package com.czxy.controller;
import com.czxy.domain.User;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
/*查询所有*/
@GetMapping
public List<User> selectAll(){
ArrayList<User> list = new ArrayList<>();
list.add(new User("u001","jack","1234",new Date()));
list.add(new User("u002","rose","4567"));
list.add(new User("u003","jim","8888"));
return list;
}
/*添加*/
@PostMapping
public User save(User user){
System.out.println(user);
return user;
}
// 更新
@PutMapping
public String update(@RequestBody String id){
System.out.println(id);
return "默认乱码";
}
/*通过id删除*/
@DeleteMapping("/{id}")
public String delete(@PathVariable String id){
System.out.println(id);
return "默认乱码";
}
/*通过id查询详细*/
@GetMapping("/{id}")
public String findById(@PathVariable String id){
System.out.println(id);
return "通过id查询详细";
}
}