我使用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,但是当jackson尝试转换为pojo时出现此错误:
nested exception is com.fasterxml.jackson.databind.JsonMappingException: Invalid UTF-8 start byte 0x9f
如果有人有任何想法,我不知道如何让这个工作?
答案 0 :(得分:0)
我刚想出来了:
我替换了这一行:
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());
用这个:
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes("UTF-8"));
我应该早点意识到,但这可能会帮助其他有类似问题的人。