【发布时间】:2015-02-25 16:42:06
【问题描述】:
我正在使用 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
如果有人有任何想法,我不知道如何让它工作?
【问题讨论】:
-
你需要提前知道你的filter中json字符串的长度吗?只是想知道是否有可能绕过实际问题......
-
是的,我需要 json 长度。我在下面发布了解决方案。感谢该博客,因为它只需要我展示的一个小调整即可工作。
标签: java json spring spring-mvc jackson