為什么阿里巴巴禁止接口返回值用枚舉?


返回枚舉類型

最近在用別的項目提供的jar包,由於對方的更新導致原本沒問題的接口返回了下面的錯誤:

mark

這個接口是我feign調用別的項目,從報錯信息可以看到是因為json反序列化失敗,枚舉類不一致導致的。

原因是:兩方引用了共同的common jar包,升級之后,那邊引用了新的,返回了新的枚舉類型,我這邊沒升級導致的。

這個問題雖然后續通過引用新jar解決了,但是我記得在阿里開發規范內不允許在返回類內用枚舉,然后果然找到了這一條:

mark

哎,但是無奈對方,嗯~ o( ̄▽ ̄)o

序列化is方法

然后,前面的問題解決了,調用之后又爆了一個bug:

截圖找不到了~~

具體就是又找不到一個屬性,然后反編譯類查看jar包確實沒有這個屬性,然后在類里面搜索這個屬性,結果發現了這個方法:

isSuccess();

(╯‵□′)╯︵┻━┻

mark

然后我為了確認,還寫了個demo,

mark

來,我們看下源碼:

mark

因為我們是is方法序列化的問題,所以進到_addMethod()方法

可以看到循環了6個方法,進到_addGetterMethod方法內

mark

mark

mark

到這里就可以看到為什么is開頭而且是boolean類型了

tips:

jackson針對這個其實是有一個配置來關閉此類場景

mapper.configure(MapperFeature.AUTO_DETECT_IS_GETTERS, false);

mark

總結:請提高自身能力,減少周圍的傻X


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM