有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用Spring MVC拦截HttpServletRequest

我正在使用Spring/Jackson将json自动转换为POJO。所有这些都可以正常工作,除了在执行头身份验证(使用过滤器)时。我一直在使用请求。getContentLength()获取json字符串的长度

这很好,直到json包含变音字符。其中,内容长度报告为长一个字符。显然,我必须得到实际的json主体。事实证明,这与调用请求一样困难。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) 个答案

  1. # 1 楼答案

    我刚想出来:

    我替换了这一行:

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

    有了这个:

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

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