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

@jsonView过滤属性

在写学期管理的获取时,写的服务测试之后没有什么问题,却在测试控制器时出现了问题。控制台报了一大堆错误。

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: com.mengyunzhi.schedule.entity.Semester["schedules"]->org.hibernate.collection.internal.PersistentBag[0]->com.mengyunzhi.schedule.entity.Schedu

主要的错就是这个,他说不能序列化json,栈溢出了,是semester["schedules"]不能序列化。

在Semester表中的schedules属性是一个一对多的属性,猜想可能是数据太多了,导致不能序列化

clipboard.png

但在后来测试时把semester里的schedules集合仅仅保存一个对象,再进行测试,还是报了这个错。
打断点debug,在经历种种寻找后找到了这个。
clipboard.png

我发现在查询semester里边有schedules,但schedules里的每个元素里边都有一个semester的对象,并且这个semester的对象跟你要查询的对象还是相同的关系,这样就造成了死循环。

问组长解决办法,组长说可以通过注解在对象序列化为json对象时忽视对象的属性,百度了一下有个@jsonignore的注解,他可以在json序列化时跳过某个属性,大致看了一下,可是使用@jsonignore就固定了对象的json序列化,我想的时根据我的需求不同来序列化不同的属性,然后找到了一个@jsonView的注解。

网上参考了一下,首先就是在你要定义一个接口,再把要序列化的属性前面加上@jsonView的注解,并标识属于的接口名称

clipboard.png

之后在控制器中使用jsonView(类名.接口名.class)就行了

clipboard.png

结果返回的数据就对了。

Body = [{"id":159,"endTime":"1539273600000","name":"ceshi3","startTime":"1538668800000","status":true,"schedules":[{"id":6408,"node":1,"week":1,"weekOrder":1},{"id":6409,"node":2,"week":1,"weekOrder":1},{"id":6410,"node":3,"week":1,"weekOrder":1}]}]

同时也可以继承你定义的接口。
参考链接:https://blog.csdn.net/u012373...

相关文章:

  • vmware创建centos虚拟机
  • 福大软工1816 · 第六次作业 - 团队选题报告
  • 尝试解决微信小程序分页最后setData数据太大限制的问题
  • teragen/terasort_简化版
  • 云计算节点故障自动化运维服务设计
  • Redis 中的布隆过滤器
  • git操作:在CentOS7上面搭建GitLab服务器
  • windows下redis 开机自启动
  • SpringBoot系列: Actuator监控
  • JavaScript常用八种继承方案
  • 20172313 2018-2019-1 《程序设计与数据结构》课堂测试修改报告
  • 使用fiddler抓取手机上的HTTPS包
  • 云栖科技评论第76期:车用半导体混战 中国怎么战?
  • 兼容性总结
  • 运维技术(一)用docker安装elk之CentOS7.4
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • DataBase in Android
  • HTTP中GET与POST的区别 99%的错误认识
  • Iterator 和 for...of 循环
  • Linux快速复制或删除大量小文件
  • Otto开发初探——微服务依赖管理新利器
  • python 学习笔记 - Queue Pipes,进程间通讯
  • React的组件模式
  • Vue.js 移动端适配之 vw 解决方案
  • WePY 在小程序性能调优上做出的探究
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 回流、重绘及其优化
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 实习面试笔记
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 一个完整Java Web项目背后的密码
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​水经微图Web1.5.0版即将上线
  • #git 撤消对文件的更改
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (4)STL算法之比较
  • (LeetCode C++)盛最多水的容器
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (生成器)yield与(迭代器)generator
  • (原)Matlab的svmtrain和svmclassify
  • (转)Linux下编译安装log4cxx
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net core使用ef 6
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @Autowired和@Resource装配
  • [ linux ] linux 命令英文全称及解释
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [.net] 如何在mail的加入正文显示图片
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序