热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringMVC使用Jackson、双向关联的解决策略@JsonIgnore

目录:一、SpringMVC和Jackson的关系:二、Jackson解决双向关联导致的栈溢出问题的解决方法:三、如何使用JsonIgnoreÿ


目录:


  • 一、SpringMVC和Jackson的关系:
  • 二、Jackson解决双向关联导致的栈溢出问题的解决方法:
  • 三、如何使用@JsonIgnore:



一、SpringMVC和Jackson的关系:
  • SpringMVC返回return Object类型数据给前端时会自动调用jackson将Object类型的数据转换成JSON格式。

举个例子:


  • 前端发送Ajax请求查询该教师的任课信息(一个老师对应多个课程):

<script>
$(function(){
$.get({
url:"${pageContext.request.contextPath}/teacher/getStudentCourse",
dataType:"json",
success(res){
console.log(res);
}
})
})
script>

  • 后端使用SpringMVC接收请求并查找信息&#xff0c;并将查询结果返回给前端&#xff1a;

&#64;Controller
&#64;RequestMapping("/teacher")
public class TeacherController {
&#64;ResponseBody
&#64;RequestMapping("/getStudentCourse")
public Object getStudentCourse(HttpSession session){
String name &#61; (String) session.getAttribute("name");
List<CourseEntity> courses &#61; teacherService.getMyCourse(name);
return courses;
}
}

这里的return courses是一个list集合&#xff0c;但是springmvc在向前端返回数据时会自动调用jackson将courses数据转换为json类型数据。


  • 前端获得任课信息&#xff1a;
    在这里插入图片描述

二、Jackson解决双向关联导致的栈溢出问题的解决方法&#xff1a;

举个例子&#xff1a;

教师和课程是一对多关系&#xff0c;所以后端我们使用双向一对多关联将教师表和课程表建立联系。


  • 教师和课程的实体类关系如图&#xff08;这里使用的是Hibernate&#xff09;&#xff1a;
    在这里插入图片描述
  • 因为使用的是双向关联 &#xff0c;当我们将教师的任课信息 List courses返回给前端时&#xff0c;集合的每个CourseEntity元素中都有一个teacher属性&#xff08;每个teacher属性是不是又有各自的courses属性…&#xff09;循环往复。所以如果我们直接将该教师的courses返回会出现栈溢出问题。
    在这里插入图片描述
    如何解决栈溢出问题呢&#xff1f;
    我们其实只想获得该老师的任课信息&#xff08;任课信息中包含课程号、课程名、课程教师信息&#xff0c;我们只想获得前两个属性&#xff09;&#xff0c;不想获得每门课中包含的课程教师信息。可以使用 &#64;JsonIgnore 注解。
    &#64;JsonIgnore在后端向前端发送数据时可以将JavaBean的部分属性忽略掉&#xff0c;即不发送这部分属性。
    在这里插入图片描述

三、如何使用&#64;JsonIgnore&#xff1a;

该注解在Jackson的jar包下&#xff0c;需要导入Jackson的相关jar文件。
在这里插入图片描述
&#xff08;其实不导入这些文件springmvc在向前端发送数据时也能使用jackson将数据转换为json类型&#xff0c;但是&#64;JsonIgnore注解不能使用&#xff0c;可能是springmvc中包含jackson的jar包&#xff0c;但是不全&#xff09;







推荐阅读
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • ECharts 官方提供了丰富的图表示例,但实际项目中往往需要从后端动态获取数据。本文将详细介绍如何从后端获取数据并将其转换为 ECharts 所需的 JSON 格式,以实现动态饼图的展示。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • PHP自学必备:从零开始的准备工作与工具选择 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
author-avatar
小女人要有小性感
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有