news 2026/7/28 15:42:05

springMvc中前端获取后台数据的方式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
springMvc中前端获取后台数据的方式

最新项目中需要用到不跳转获取后台数据(List对象集合),百度操作一波,发现CSDN的帖子真水,根本没有一遍讲的比较全面的,而且帖子大多数是错的(可能作者执行成功了,但是那只是你刚好条件巧合罢了,换个条件,你就失败了,所以帖子没深度。),所以我花了两天时间整理试验一波,总结如下,有不对的地方请大家指出,虚心求教。

跳转获取

1 Servlet

Servlet是最底层的方式,需要HttpServletRequest和HttpServletResponse相配合,把相关值保存在request、session、cookie、application作用域的某一个(如何获取相关作用域,我在这里不作详解),之后直接用el(这只是其中的一种方式)语句读取。相关代码如下:

@RequestMapping("allCity3") public String queryAllCity3(HttpServletRequest request, HttpServletResponse response) { List<City> cities = cityService.queryAllCity(); for (City city : cities) { city.setAreas(null); } // 保存到session中 /*HttpSession session = request.getSession(); session.setAttribute("cities", cities);*/ // 保存到request中 request.setAttribute("cities", cities); // 返回的页面(这里配合相应的springMvc视图解析器) return "main"; }

注:以上代码还不是最底层的,视图层就用了springMvc的视图解析配置(上面代码“return “main””),如何你想更底层,直接使用request或response实现跳转(代码我就不贴了)。

2 ModelAndView

把数据保存到ModelAndView中,直接传送到前端页面,用jstl(当然不止一种方式,就不多说)读取。相应的代码如下:

// 以下代码是控制器(controller)里面的方法的子代码 // 把要保存的数据保存进ModelAndView中 modelAndView.addObject("areaStatisticsList", areaStatisticsList); // 设置跳转页面 modelAndView.setViewName("areaStatistics"); // 返回值 return modelAndView;

ajax获取

ajax获取也就是异步获取,一般不进行页面跳转,作为页面局部刷新的一种解决方案。

1 HttpServletResponse

这个是Servlet的解决方案,也是底层解决方案。其他高级的方案大都是建立在其基础上的。配合空返回void的controller类方法使用使用,利用其内部对象PrintWriter把传送值输送到前端,之后ajax回调函数调用其数据实现页面局部更新。相关代码如下:

try { // 设置响应格式(如果不加会出现中文乱码) response.setContentType("html/text;charset=utf-8"); // 把数据输送到前端,供ajax回调函数调用 response.getWriter().print(cities); } catch (IOException e) { e.printStackTrace(); }

2 @ResponseBody

@ResponseBody作为springMvc控制层的返回数据的注解(感觉这个可以有更好表述),是springMvc框架推荐的方法解决方案。默认最终转换为json数据(也就是返回值是json格式),分两组方式转换:

2.1 人工转换(个人自己命名的)

人工转换就是在控制层直接装换成json格式的字符串,下面举了一个list对象集合转换成JSONArray格式的字符串的例子,代码如下:

// 对应json的maven依赖(json工具依赖包太多,我没有做过多的研究,或许其他依赖包也能人工转换呢,有待大家一起去研究 <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.2.3</version> <classifier>jdk15</classifier><!-- 指定jdk版本 --> </dependency> @RequestMapping(value = "queryAreasByCity", produces = {"text/html;charset=utf-8"}) @ResponseBody public String queryAreaByCityName(@RequestParam("cName") String cName){ City city = cityService.queryCityByCName(cName); List<Area> areas = city.getAreas(); // 转换为JSONArray类型 JsonConfig config = new JsonConfig(); config.setExcludes(new String[]{"city", "enterprises"}); JSONArray jsonArray = JSONArray.fromObject(areas, config); String json = jsonArray.toString(); return json; }

2.2 spring配置方式

spring配置方式,就是把转换成json工作交给spring管理(也就是controller层返回值是List也会自动转换成JSON格式字符串),直接在springMvc层配置相关转换器bean。相关代码如下:

// maven依赖 <!--javabean转换成json的依赖--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson.version}</version> </dependency> // springMvc框架的spring(IOC)配置,方法一: <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="stringHttpMessageConverter"/> <!--json转换器--> <ref bean="mappingJacksonHttpMessageConverter" /> </list> </property> </bean> <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"> <property name = "supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> </list> </property> </bean> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name = "supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> <bean class="org.springframework.http.MediaType"> <constructor-arg index="0" value="text"/> <constructor-arg index="1" value="plain"/> <constructor-arg index="2" value="UTF-8"/> </bean> <bean class="org.springframework.http.MediaType"> <constructor-arg index="0" value="*"/> <constructor-arg index="1" value="*"/> <constructor-arg index="2" value="UTF-8"/> </bean> <bean class="org.springframework.http.MediaType"> <constructor-arg index="0" value="text"/> <constructor-arg index="1" value="*"/> <constructor-arg index="2" value="UTF-8"/> </bean> <bean class="org.springframework.http.MediaType"> <constructor-arg index="0" value="application"/> <constructor-arg index="1" value="json"/> <constructor-arg index="2" value="UTF-8"/> </bean> </list> </property> </bean> // springMvc框架的spring(IOC)配置,方法二: <mvc:annotation-driven> <mvc:message-converters> <!--后台对前端的转换器--> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <!--解决乱码问题--> <property name="supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> </list> </property> </bean> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> </mvc:message-converters> </mvc:annotation-driven>

注:上面提到的两种配置转换器方法,我也是从网上找来的,我实践了一下,都可以。至于原理我就不多探讨了。

总结

springMvc中以上两种获取后台数据的方式,都按照两种思路来进行的,一是采用Servlet原始解决方案,二是采用SpringMvc现行的解决方案。跳转方式传给前端的是model数据,按照键值对来传值,按照属性访问;ajax方式传给前端的数据有多种形式(json、html、text等),后台的model数据传给前端需要进行数据转换,一般转换成json格式(其他数据我没研究,但是我觉得没必要研究,js的语言基本格式是json,在前端你最终还是需要转换成json(个人之间)),然而request和response里面好像实现了model转换成json字符串(我试验了一下,确实,有可能理解有问题,欢迎大家指出),SpringMvc则需要转换成json字符串。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 15:41:50

立足广州深耕广告行业,传播易是如何一步步拿下多项大奖的?

近日&#xff0c;广州传播易智能科技有限公司荣获广州市广告行业协会、全媒体委员会联合授予的2018 年度广州市广告行业全媒体新锐企业称号。该奖项经由行业资质核验、业务实力评审、市场口碑调研多层严苛筛选颁发&#xff0c;是广州官方广告权威机构对传播易初创阶段模式创新、…

作者头像 李华
网站建设 2026/7/28 15:40:00

无需代码本地 AI 自动化,OpenClaw 完整搭建与办公指令示例

&#x1f99e;教程适配&#xff1a;OpenClaw v2.7.9 | 适配 Windows10/11、macOS 双系统 核心亮点&#xff1a;提供全程可视化图形操作界面&#xff0c;自动补齐全套运行依赖&#xff0c;数据独立存储于本地设备&#xff0c;兼容多款主流大模型&#xff0c;并采用轻量化的 45.7…

作者头像 李华
网站建设 2026/7/28 15:39:49

超低功耗电池监测与智能电源管理方案

1. 不可充电初级电池的寿命挑战与解决方案在物联网设备和便携式电子设备中&#xff0c;不可充电的初级电池&#xff08;如碱性电池、锂亚硫酰氯电池&#xff09;仍然是主流电源选择。这类电池虽然成本低廉、使用简单&#xff0c;但存在一个致命弱点&#xff1a;一旦电量耗尽就必…

作者头像 李华
网站建设 2026/7/28 15:39:08

计算机毕业设计之基于SpringBoot的二手车在线售卖系统的设计与实现

当前&#xff0c;由于人们生活水平的提高和思想观念的改变&#xff0c;然后随着经济全球化的背景之下&#xff0c;互联网技术将进一步提高社会综合发展的效率和速度&#xff0c;互联网技术也会涉及到各个领域&#xff0c;于是传统的管理方式对时间、地点的限制太多&#xff0c;…

作者头像 李华