簡體   English   中英

如何使用Spring MVC Jackson攔截HttpServletRequest

[英]How to intercept HttpServletRequest with Spring MVC Jackson

我正在使用Spring / Jackson將json自動轉換為POJO。 一切工作正常,除非我正在執行標頭身份驗證(使用過濾器)。 我一直在使用request.getContentLength()來獲取json字符串的長度。

效果很好,直到json包含變音符號為止。 然后報告內容長度為一個字符長。 因此,顯然我必須獲取實際的json主體。 事實證明這很困難,因為調用request.getInputStream會導致Jackson失敗,因為輸入流已關閉。 與getReader相同。

因此,我已經完成了此博客中概述的操作: http : //natch3z.blogspot.co.uk/2009/01/read-request-body-in-filter.html

哪個可行,但不能正確編碼為UTF-8。 所以我替換了這一行:

  bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

至:

  bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));

它在我的日志中顯示正確的json,但是當傑克遜嘗試轉換為pojo時出現此錯誤:

 nested exception is com.fasterxml.jackson.databind.JsonMappingException: Invalid UTF-8 start byte 0x9f 

如果有人有任何想法,我不確定如何使它正常工作?

我只是想通了:

我替換了這一行:

final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());

有了這個:

final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes("UTF-8"));

我應該早點意識到的,但是這可能會幫助遇到類似問題的其他人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM