過濾器修改響應(yīng)體后,前端JSON解析失敗怎么辦

在過濾器中修改響應(yīng)體:解決前端解析json對(duì)象失敗的問題

在實(shí)際開發(fā)中,我們經(jīng)常需要對(duì)服務(wù)器返回的數(shù)據(jù)進(jìn)行一些處理,例如將long類型的id轉(zhuǎn)換為string類型,以方便前端解析。本文將探討在過濾器中修改響應(yīng)體后,前端無法正常解析json對(duì)象的問題,并提供解決方案。

問題描述:

開發(fā)者在過濾器中使用contentcachingresponsewrapper包裝響應(yīng),并修改了響應(yīng)體中的long類型字段為String類型,但前端無法正常解析返回的json對(duì)象。前端收到的數(shù)據(jù)是一個(gè)字符串,而不是預(yù)期的json對(duì)象。代碼示例如下:

@Component @Slf4j public class LongTypeFilter extends OncePerRequestFilter {     // ... 省略部分代碼 ... }

問題根源在于過濾器中修改響應(yīng)體的方式。代碼中先讀取響應(yīng)體,修改后又重新寫入。這種方式雖然修改了數(shù)據(jù),但破壞了響應(yīng)的結(jié)構(gòu),導(dǎo)致前端無法直接解析。 前端接收到的數(shù)據(jù)被錯(cuò)誤地封裝成了一個(gè)字符串,而不是一個(gè)json對(duì)象。

立即學(xué)習(xí)前端免費(fèi)學(xué)習(xí)筆記(深入)”;

更有效的解決方案:

直接使用jackson的objectmapper進(jìn)行配置,在序列化過程中將long類型轉(zhuǎn)換string類型,無需在過濾器中手動(dòng)修改響應(yīng)體。 這種方法更加高效且避免了代碼中手動(dòng)處理響應(yīng)體帶來的復(fù)雜性和潛在錯(cuò)誤。 例如,可以使用jackson2objectmapperbuildercustomizer來注冊(cè)自定義的序列化器,將long類型序列化為string類型。 這樣,在數(shù)據(jù)序列化階段就能完成轉(zhuǎn)換,避免了過濾器中復(fù)雜且容易出錯(cuò)的響應(yīng)體修改過程。

這種方法避免了直接操作響應(yīng)體的復(fù)雜性,也更符合restful api的設(shè)計(jì)原則,將數(shù)據(jù)轉(zhuǎn)換邏輯放在序列化階段處理,提高代碼的可讀性和可維護(hù)性。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享