繁体   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