当前位置: 首页 > news >正文

SpringMVC的响应处理

文章目录

  • 一、传统同步业务数据响应
    • 1. 请求资源转发
    • 2. 请求资源重定向
    • 3. 响应模型数据
    • 4. 直接回写数据
  • 二、前后端分离异步业务数据响应

一、传统同步业务数据响应

Spring响应数据给客户端,主要分为两大部分:
⚫ 传统同步方式:准备好模型数据,在跳转到执行页面进行展示,此方式使用越来越少了,基于历史原因,一些旧项目还在使用;
⚫ 前后端分离异步方式:前端使用Ajax技术+Restful风格与服务端进行Json格式为主的数据交互,目前几乎都是此种方式了。

传统同步业务在数据响应时,SpringMVC又涉及如下四种形式:
⚫ 请求资源转发;
⚫ 请求资源重定向;
⚫ 响应模型数据;
⚫ 直接回写数据给客户端;

1. 请求资源转发

在这里插入图片描述

2. 请求资源重定向

在这里插入图片描述

3. 响应模型数据

响应模型数据本质也是转发,在转发时可以准备模型数据

@GetMapping("/forward5")
public ModelAndView forward5(ModelAndView modelAndView){// 准备JavaBean模型数据User user = new User();user.setUsername("haohao");// 设置模型modelAndView.addObject("user",user);// 设置视图modelAndView.setViewName("/index.jsp");return modelAndView;
}

4. 直接回写数据

直接通过方法的返回值返回给客户端的字符串,但是SpringMVC默认的方法返回值是视图,可以通过@ResponseBody 注解显示的告知此处的返回值不要进行视图处理,是要以响应体的方式处理的

@GetMapping("/response2")
@ResponseBodypublic String response2() throws IOException {return "Hello haohao!";
}

二、前后端分离异步业务数据响应

其实此处的回写数据,跟上面回写数据给客户端的语法方式一样,只不过有如下一些区别:
⚫ 同步方式回写数据,是将数据响应给浏览器进行页面展示的,而异步方式回写数据一般是回写给Ajax引擎的,即谁访问服务器端,服务器端就将数据响应给谁
⚫ 同步方式回写的数据,一般就是一些无特定格式的字符串,而异步方式回写的数据大多是Json格式字符串

回写普通数据使用@ResponseBody标注方法,直接返回字符串即可,此处不在说明;

回写Json格式的字符串,即将直接拼接Json格式的字符串或使用工具将JavaBean转换成Json格式的字符串回写

@GetMapping("/response3")
@ResponseBody
public String response3(HttpServletResponse response) {return "{\"username\":\"haohao\",\"age\":18}";
}
@GetMapping("/response4")
@ResponseBody
public String response4() throws JsonProcessingException {// 创建JavaBeanUser user = new User();user.setUsername("haohao");user.setAge(18);// 使用Jackson转换成json格式的字符串String json = new ObjectMapper().writeValueAsString(user);return json;
}

在讲解SringMVC接收请求数据时,客户端提交的Json格式的字符串,也是使用Jackson进行的手动转换成JavaBean

当我们使用了@RequestBody时,直接用JavaBean就接收了Json格式的数据,原理其实就是SpringMVC底层帮我们做了转换,此处@ResponseBody也可以将JavaBean自动给我们转换成Json格式字符串回响应

@GetMapping("/response5")
@ResponseBody
public User response5() throws JsonProcessingException {// 创建JavaBeanUser user = new User();user.setUsername("haohao");user.setAge(18);// 直接返回User对象return user;
}

@ResponseBody注解使用优化,在进行前后端分离开发时,Controller的每个方法都是直接回写数据的,所以每个方法上都得写@ResponseBody,可以将@ResponseBody写到Controller上,那么该Controller中的所有方法都具备了返回响应体数据的功能了

@Controller
@ResponseBody
public class UserController{@GetMapping("/response7")public ResultInfo response7() {// 省略其他代码return info;}@GetMapping("/response5")public User response5() throws JsonProcessingException {//省略其他代码return user;}// ... 省略其他方法 ...
}

进一步优化,可以使用@RestController替代@Controller和@ResponseBody,@RestController内部具备的这两个注解的功能

@RestController
public class UserController{@GetMapping("/response7")public ResultInfo response7() {// 省略其他代码return info;}@GetMapping("/response5")public User response5() throws JsonProcessingException {//省略其他代码return user;}// ... 省略其他方法 ...
}
http://www.lryc.cn/news/44702.html

相关文章:

  • 静态词向量预训练模型
  • 永久免费CRM怎么选?有什么好用的功能?
  • leetcode重点题目分类别记录(二)基本算法:二分,位图,回溯,动态规划,图论基础,拓扑排序
  • 【JaveEE】多线程之定时器(Timer)
  • 【理论推导】变分自动编码器 Variational AutoEncoder(VAE)
  • 【哈希表:哈希函数构造方法、哈希冲突的处理】
  • HTML5 应用程序缓存
  • 全国计算机等级考试三级网络技术选择题考点
  • Python和VC代码实现希尔伯特变换(Hilbert transform)
  • 嵌入式C语言语法概述
  • 蓝桥杯第19天(Python)(疯狂刷题第3天)
  • 【数据库连接,线程,ThreadLocal三者之间的关系】
  • java 虚拟股票交易系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目
  • spring如何开启允许循环依赖
  • jenkins+sonarqube+自动部署服务
  • 【算法系列之动态规划III】背包问题
  • MONAI-LayerFactory设计与实现
  • Thinkphp 6.0路由的定义
  • Kafka系列之:深入理解Kafka集群调优
  • creator-泄漏检测之资源篇
  • 【DevOps】Jenkins 运行任务时遇到 FATAL:Unable to produce a script file 报错(已解决)
  • Web前端
  • 资源操作:Resources
  • GDB调试的学习
  • 熵值法综合评价分析流程
  • 使用Python Pandas库操作Excel表格的技巧
  • LeetCode练习七:动态规划上:线性动态规划
  • 基于正点原子F407开发版和SPI接口屏移植touchgfx完整教程(一)
  • Linux--进程间通信
  • hadoop伪分布式集群搭建