做業提交系統匆匆上線後,在判捲過程當中發現,當點擊下一個做業時,做業的文件目錄不顯示。這致使我一度覺得學生交了白卷上去,果斷打了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