做业提交系统匆匆上线后,在判卷过程当中发现,当点击下一个做业时,做业的文件目录不显示。这致使我一度觉得学生交了白卷上去,果断打了0分。后来在好友的提醒下,才发现这个问题。咱们发现只有当第一次点进去的做业才有文件目录,其余自动下一个的做业无文件目录。git
首先,一开始怀疑v层显示有问题,看了看其余地方,写法差很少,而且第一个做业正常显示,没问题。
而后看一下c层,前台打印一下做业相关文件信息,发现为undefined。
第一次数据初始化和后面的下一个做业请求的是不一样地址。可是都是将返回的data赋值给work,一个是返回的是work类型,一个返回的是Page<Work>类型。work都应该是完整的接收到了后台返回的数据才对。github
而后又去看了眼后台,想起了本身原来写的@JsonView,恍然大悟。
原来请求下一个未评阅的方法为了方便,直接请求后台的getAll方法,而后拿出来第一个未评阅的做业给work。可是后台的getAll方法当初设计的时候减小非必要的信息,没有让他返回Attachments
也就是做业文件字段。从而致使了前台获取不到文件字段。问题的缘由找到了,问题也就迎刃而解,直接修改后台getAll的JsonView,在GetAllJsonView
定义上继承Work.AttachmentsJsonView
,问题解决,提交。segmentfault
这貌似只是解决了当前问题,却使得要改变@JsonView,感受不该该这么改。
一开始想写单元测试避免这种状况再发生,可是从前台c层想到前台m层,在想到后台c层,发现这并非单元测试可以解决的。前台只要有数据就正常显示没问题,后台getAll方法不返回做业文件也没问题。问题是咱们的前台本应想获取某一做业,却请求了后台getAll方法。
解决:
经过上面的分析,咱们要恢复后台返回给前台单个做业的方法。那咱们只能在后台m层经过获取未评阅的第一个做业来获取下一个做业。ide
/** * 获得下一个未评阅的做业 * @return 做业 */ @Override public Work getNextNotReviewedWork() { Pageable pageable = PageRequest.of(0,10); Page<Work> works = this.getAll(null, null, null, false, pageable); List<Work> workList = works.getContent(); Work work = workList.get(0); return work; }
这样修改虽然费事了点,可是感受更加规范。单元测试
有些是单元测试解决不了的问题,这时只能靠咱们的规范来减小bug。测试
本文做者:河北工业大学梦云智开发团队 - 赵凯强this