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

SpringMVC-响应数据

一、引子

我们在上一篇文章SpringMVC-组件解析里介绍了SpringMVC框架执行一个请求的过程,并演示了快速使用Controller承接请求。本篇我们将深入介绍SpringMVC执行请求时,如何响应客户端。

二、响应类型

SpringMVC的数据响应方式主要分为两类(1)页面跳转(2)返回数据。其中,对于(1)页面跳转:又包括直接返回字符串与通过返回ModelAndView对象。对于(2)返回数据:又包括返回普通的字符串与返回集合/对象。

三、页面跳转

页面跳转都是前后端不分离的做法,所以这部分我们简单介绍一下。

(1)返回字符串

返回字符串的方式自我们介绍SpringMVC以来便一直是以这种方式来演示的,所以我们在这里就不再重复演示了。

(2)返回ModelAndView

我们先来做一个简单的回顾:读者是否还记得在JavaWeb阶段,我们声明一个类,然后继承HttpServlet。在重写doPost或doGet方法时形参为HttpServletRequest req, HttpServletResponse resp。我们提到doPost与doGet方法是由谁来调用呢,参数req与resp又是如何传入方法的呢。如果忘记了可以回顾Servlet执行流程与Servlet体系结构两篇文章。答案是由Web容器(如Tomcat)来调用与传参的。

在SpringMVC中也是,我们可以在Controller的方法中传入ModelAndView对象,Model对象,甚至是HttpServletRequest、HttpServletResponse等类型的对象。SpringMVC都会在调用时为你传入这些对象。示例如下:

    @RequestMapping("/model")public ModelAndView model(ModelAndView modelAndView) {modelAndView.setViewName("success");return modelAndView;}

又如:

  @RequestMapping("/http")public String model(HttpServletRequest httpServletRequest) {System.out.println(httpServletRequest);httpServletRequest.setAttribute("username", "zhangsan");return "success";}
四、回写数据

回写数据需要用@ResponseBody注解修饰类或方法,表明不进行视图跳转,而是需要返回数据。

(1)回写普通字符串
    @RequestMapping("/return")@ResponseBodypublic String returnData() {return "return";}
(2)回写对象

返回对象数据需要JSON序列化,还需要在处理器适配器中配置数据转换器:

添加依赖

        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.10</version></dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.databind/jackson-databind --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.10</version></dependency>

是否还记得在SpringMVC-组件解析中介绍的处理器适配器(HandlerAdapter),在其中配置一个属性:配置数据转换器。这有点类似于在视图解析器配置视图的前后缀。(请读者回顾SpringMVC-组件解析)

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><property name="messageConverters"><list><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/></list></property></bean>

Controller中方法:

    @RequestMapping("/user")@ResponseBodypublic User returnObject() {User user = new User();user.setName("zhangsan");user.setAge(23);return user;}
五、总结

至此我们完成了SpringMVC-响应的介绍,请读者继续关注,笔者将在下一篇文章中为大家介绍SpringMVC-请求的介绍。届时将可以利用SpringMVC框架完成大部分的请求与响应啦~

http://www.lryc.cn/news/294866.html

相关文章:

  • 数学建模:数据相关性分析(Pearson和 Spearman相关系数)含python实现
  • 使用pandas将excel转成json格式
  • 双向链表的插入、删除、按位置增删改查、栈和队列区别、什么是内存泄漏
  • Linux 驱动开发基础知识——总线设备驱动模型(七)
  • RTthread线程间通信(邮箱,消息队列,信号/软件中断)---03信号(软件中断)源码分析
  • 老版本labelme如何不保存imagedata
  • vscode 如何修改c/c++格式化风格,大括号不换行
  • IP协议(2) 和 数据链路层协议基础
  • Flink-1.18.1环境搭建
  • deepin20.9安装及配置
  • 2-2 动手学深度学习v2-损失函数-笔记
  • 非springboot 使用aop 切面
  • MongoDB 字段中数据类型不一致序列化异常排查与处理
  • 网络安全简介
  • 【Docker】.NET Core 6.0 webapi 发布上传到Docker Desktop并启动运行访问,接口返回数据乱码解决方法
  • 【Android Gradle 插件】自定义 Gradle 插件模块 ⑤ ( 完整总结 )
  • 浅析现代计算机启动流程
  • 七月论文审稿GPT第2.5和第3版:分别微调GPT3.5、Llama2 13B以扩大对GPT4的优势
  • Android Studio导入项目 下载gradle很慢或连接超时
  • 如何使用VSCode上运行Jupyter,详细案例过程出可视化图
  • Linux中有名管道和无名管道
  • [SWPUCTF 2021 新生赛]easyupload1.0
  • 【Linux网络编程三】Udp套接字编程(简易版服务器)
  • 【Rust】字符串,看这篇就够了
  • 单片机和 ARM 的区别
  • JavaScript从入门到精通系列第三十一篇:详解JavaScript中的字符串和正则表达式相关的方法
  • 23、数据结构/查找相关练习20240205
  • 【VSTO开发-WPS】下调试
  • git 的基本概念
  • 《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第6章 逻辑斯谛回归与最大熵模型(1)6.1 逻辑斯谛回归模型