SpringMVC使用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接收请求并查找信息,并将查询结果返回给前端:
@Controller
@RequestMapping("/teacher")
public class TeacherController {
    @ResponseBody
    @RequestMapping("/getStudentCourse")
    public Object getStudentCourse(HttpSession session){
        String name = (String) session.getAttribute("name");
        List<CourseEntity> courses = teacherService.getMyCourse(name);
        return courses;
    }
}

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

  • 前端获得任课信息:
    在这里插入图片描述

二、Jackson解决双向关联导致的栈溢出问题的解决方法:

举个例子:

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

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

三、如何使用@JsonIgnore:

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姓蔡小朋友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值