11|ModelAndView :如何将处理结果返回给前端?
处理返回数据
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了MVC框架中处理返回结果的流程和技术细节。首先介绍了处理返回数据的方式,包括返回纯数据和返回页面两种情况。其次,详细分析了如何使用@ResponseBody注解和HttpMessageConverter接口将Java对象转换成字符串格式返回给前端。文章还介绍了如何定义和实现HttpMessageConverter和ObjectMapper接口,以及在RequestMappingHandlerAdapter类中使用messageConverter属性进行数据转换。另外,文章还介绍了ModelAndView结构的定义和使用,以及在调用目标方法后返回值的处理过程。通过对invokeHandlerMethod()方法的分析,总结了处理三种情况的方式:返回纯数据、返回ModelAndView对象和返回字符串。文章还讨论了ViewResolver的作用,以及如何扩展到多种前端渲染方式。整体来说,本文对Spring框架的解耦思想进行了深入探讨,为想深入理解Spring框架的读者提供了有价值的参考。
《手把手带你写一个 MiniSpring》,新⼈⾸单¥59
全部留言(7)
- 最新
- 精选
- Geek3485老师的minitomcat源码在哪可以看到
编辑回复: 老师正在准备tomcat的相关课程,后续课程上线就可以看到啦~
2023-08-04归属地:上海 - 马儿1.目前如果加了ResponseBody注解返回String的话返回的是String在内存中的信息,而需要的字符串值字段在这个json中也是内存中的地址值,这将导致结果不符合预期,这里应该还需要对writeValuesAsString这个函数优化一下,或者是拓展一些其他的实现。 2. 目前在InternalResourceViewResolver中写死了处理Jsp的View,可以在加一个有参构造函数,传入参数为资源类型,InternalResourceViewResolver内部维护一个资源类型和View的Map 希望老师可以抽时间加一些答疑课,对之前一些同学问到的问题在课上统一解答一下。或者是将一些mini-spring中的一些拓展点提供一个思路,比如上节课遇到的传参数不支持基本类型和自定义类型中WebDataBinder不可用的问题。谢谢老师。
作者回复: 1 你说的是,线下课确实是作为扩展练习的。 2 你可以这么考虑,对别的view,要用不同的view resolver,即写一个与InternalResourceViewResolver对等的实现来支持别的view。
2023-04-08归属地:四川 - peter请教老师几个问题: Q1:本文所讲的内容,就是模仿SpringMVC,对吗? Q2:很多信息都存在request中,那这个request对象会占用很大内存吗?对于一个用户,一般地讲,会占用多大内存?比如10M? Q3:View这个类,是生成一个页面文件吗?还是把数据填充到已经存在的页面上?
作者回复: Peter你好。MiniSpring是模仿Spring框架的一个简化版本,目的是作为一个简要地图便于大家理解Spring的结构和源代码,MiniSpring的包结构类名和主要流程方法都是跟Sping框架本身一样的,所以学习了MiniSpring,会比较容易继续深入了解Spring的源代码。 request是对http request的包装,大小主要依赖于客户端传上来的数据包大小,不考虑附件,一般不会太大,应该在200K以内。你要再学一下我的MiniTomcat后就会更加清楚。 View这个类的定位是前端展示,如果是JSP,就是吧数据填充到JSP中,然后展示出来。最近这些年都是前后端分离了,这一部分简单了解一下就可以。
2023-04-06归属地:北京 - 梦某人打卡成功,从理解上这节课并不难,虽然很多代码(主要是User类和一些辅助)需要参考GitHub不然无法进行。但是调整环境浪费了接近2个小时,因为访问jsp一直报404的错误,后来意识到是没在idea的Project Structe 中的 Module设置资源文件夹。。。。另外目前的返回来讲,string包装成了 ModelAndView,但是这样做在reander的时候无法辨别,导致最基础的 /test反而无法访问。思考题来说,View的两个类,一个负责分析内容,一个负责渲染内容,将 ViewResolver 进行扩展就可以解决相关问题了。2023-04-18归属地:河北1
- Geek_b3425a最新版初始化的handleAdapter的时候并没有给webBindingInitialize赋值,只给了一个set方法但是没有找到调用的地方,这样有请求进来的时候不会就空指针了吗?是我漏看东西了吗2023-09-14归属地:上海
- Geek_b3425a 有点不懂,老师仓库代码,handleMaping和handleAdapter都实现了applicationContextAware接口,类中applicationContext属性是abstractApplicationContext在getBean的时候给set进去的,不懂得是在容器启动的时候并没有这个bean相应的实体对象,并不会调用这个方法,我本地handleMapping中容器属性也是空,并没有掉set方法给他赋值2023-09-14归属地:上海
- C.结束结束!2023-04-06归属地:江苏1