Fork me on GitHub

JackLin的博客

当前位置:首页 > 标签

SpringBoot 14 Spring 2 SpringMVC 3 MyBatis 2 Linux 4 阿里云 13 宝塔 1 Docker 3 ElasticSearch 2 Redis 4 Shiro 0 Dubbo 0 Swagger 0 Thymeleaf 6 数据库 11 MySQL 11 外键 2 Gradle 1 Test 0 Tomcat 1 JavaWeb 7 Ajax 1 注解 3 css 2 报错 3 多数据源 1 Java基础 1 源码 2 Servlet 1 JSP 1 环境搭建 8 RabbitMQ 1 七牛云 1 Edit.md 1 图像识别 4 英语 2 Zookeeper 1

SpringBoot项目中Ajax详解,结合@RequestBody和@ResponseBody

  • 2020-04-14
  • 153
  • SpringBoot
### 基本介绍 @ ResponseBody 和 @ RequestBody 经常在 Controller 层中使用,今天就结合Ajax来详解的介绍一下这两个注解。 #### @ RequestBody 用在参数前面 #####(1)前端Ajax传递的是JSON字符串 当前端发送的Ajax请求是传递的数据data是一个**JSON字符串**时,后端 Controller 层就可以使用 **@ ResponseBody** 注解结合 **Map** 来接收参数。 > 前端 ``` var inputTextObj = { "text": inputText }; $.ajax("/admin/tagGetSearchResult", { type: 'post', dataType: 'json', data: JSON.stringify(inputTextObj), //转换为字符串 contentType : "application/json", // 记得加上这个 }); ``` > 后端 ``` @RequestMapping("/tagGetSearchResult") @ResponseBody public String getSearchResult(@RequestBody HashMap<String, String> map) { String inputText = map.get("text"); // 获得Map里面的值(inputText) List<Tag> tags = tagService.queryLike(inputText); String str = JSON.toJSONString(tags); return str; } ``` #####(2)前端Ajax传递的是JSON对象 如果发送的Ajax的data是JSON对象,则后端可以直接使用 @ RequestParam 注解来接收参数,不需要使用 @ ResponseBody > 前端 ``` var dataObj = { "title": $('#article-title').val(), "blogid": tempBid, "my-editormd-markdown-doc": $("#my-editormd-markdown-doc").text(), "type": $('#my-type').val(), "original": original + '', "ifComment": ifComment + '', "tag": tagNames, // 标签名称 "published": '0', }; $.ajax("/admin/updateBlog", { type: "POST", data: dataObj, // 注意:这里传递的是一个 json 对象,后端需要利用 @RequestParam 注解 dataType: "text", // 返回的类型为纯文本字符串类型 traditional: true, }); ``` > 后端 ``` @RequestMapping("/updateBlog") @ResponseBody public String updateBlog(@RequestParam("blogid") String bid, @RequestParam("title") String title, @RequestParam("my-editormd-markdown-doc") String bcontent, @RequestParam("type") String typeName, @RequestParam("original") String orginal, @RequestParam("ifComment") String ifComment, @RequestParam("tag") String[] tags, @RequestParam("published") String published) { // 逻辑代码... } ``` #### @ ResponseBody 用在方法前面 表示直接返回一个字符串,处理Ajax请求时,如果后端查询出来的是一个 List 集合,那么可以转换为 JSON 字符串,结合 @ ResponseBody 返回。 - 具体可以看上面第(1)小点的后端代码 - 上面的 `JSON.toJSONString(tags);` 的 JSON 是使用的阿里巴巴的 FastJson,需要导入对应的依赖,如下: ``` <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency> ```