如何使用Spring MVC Jackson拦截HttpServletRequest

时间:2015-02-25 16:42:06

标签: java json spring 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,但是当jackson尝试转换为pojo时出现此错误:

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

如果有人有任何想法,我不知道如何让这个工作?

1 个答案:

答案 0 :(得分:0)

我刚想出来了:

我替换了这一行:

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

用这个:

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

我应该早点意识到,但这可能会帮助其他有类似问题的人。

相关问题