SpringMVC:进阶

Ajax 异步交互SpringMVC 默认用 MAppingJackson2HttpMessageConverter 对 JSON 数据进行转换 , 需要加入 Jackson 的包;同时在 spring-mvc.xml 使用 <mvc:annotation-driven />
...<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.8</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.8</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.0</version></dependency>......<!-- 处理器映射器-处理器适配器 。进行了功能的增强:支持 json 的读写 --><mvc:annotation-driven />...@RequestBody该注解用于 Controller 的方法的形参声明 , 当使用 Ajax 提交并指定 contentType 为 JSON 形式时 , 通过 HttpMessageConverter 接口转换为对应的 POJO 对象 。
srcmainwebappajax.jsp
<%@ page contentType="text/html;charset=UTF-8" language="JAVA" %><html><head><title>Ajax</title></head><body><%-- ajax 异步交互 --%><button id="btn1">ajax 异步提交</button><script src="${pageContext.request.contextPath}/js/jquery-3.5.1.js"></script><script>$("#btn1").click(function () {let url = '${pageContext.request.contextPath}/user/ajaxRequest';let data = '[{"id":1,"username":"张三"},{"id":2,"username":"李四"}]';?$.ajax({type: 'POST',url: url,data: data,contentType: 'application/json;charset=utf-8',success: function (resp) {alert(JSON.stringify(resp));}})});</script></body></html>在 UserController 中添加方法
@RequestMapping("/ajaxRequest")public List<User> ajaxRequest(@RequestBody List<User> list){System.out.println(list);}@ResponseBody该注解用于将 Controller 的方法返回的对象 , 通过 HttpMessageConverter 接口转换为指定格式的数据如:JSON , xml 等 , 通过 Response 响应给客户端 。
@RequestMapping("/ajaxRequest")@ResponseBodypublic List<User> ajaxRequest(@RequestBody List<User> list){System.out.println(list);return list;} 
RESTful什么是 RESTfulRestful 是一种软件架构风格、设计风格 , 而不是标准 , 只是提供了一组设计原则和约束条件 。主要用于客户端和服务器交互类的软件 , 基于这个风格设计的软件可以更简洁 , 更有层次 , 更易于实现缓存机制等 。
Restful 风格的请求是使用“URL + 请求方式”表示一次请求目的的 , HTTP 协议里面四个表示操作方式的动词如下:

  • GET:读取(Read)
  • POST:新建(Create)
  • PUT:更新(Update)
  • DELETE:删除(Delete)
查询所有:/user/findAll GET /user
根据 ID 查询:/user/findById?id=3 GET /user/{1}
新增:/user/save POST /user
修改:/user/update PUT /user
删除:/user/delete?id=3 DELETE /user/{1}
代码实现@PathVariable
用来接收 RESTful 风格请求地址中占位符的值 。
@RestController
RESTful 风格多用于前后端分离项目开发 , 前端通过 Ajax 与服务器进行异步交互 , 我们处理器通常返回的是 JSON 数据所以使用 @RestController 来替代 @Controller 和 @ResponseBody 两个注解 。
/** * 没有 ResponseBody 的话 , 会把 return 的值作为逻辑视图进行解析; * 带有 ResponseBody 则直接进行数据的响应 */@RestController // @RestController = @Controller + @ResponseBody@RequestMapping("/restful")public class RestfulController {?/*** 根据 id 进行查询*/@GetMapping("/user/{id}") // @RequestMapping(value = https://www.isolves.com/it/cxkf/kj/2020-09-14/"/user/{id}",method = RequestMethod.GET)public String findById(@PathVariable Integer id) {// 获取 restful 编程风格中 url 里面占位符的值return "findById: " + id;}?/*** 新增方法* POST 对应的是新增*/@PostMapping("/user") // @RequestMapping(value = "/user",method = RequestMethod.POST)public String post(){return "post";}?/*** 更新方法* PUT 对应的是更新操作*/@PutMapping("/user")public String put(){return "put";}?/*** 删除方法*/@DeleteMapping("/user/{id}")public String delete(@PathVariable Integer id){return "delete" + id;}?} 
文件上传文件上传三要素