如何从HttpServletRequest getParameter中记录CharConversionException

时间:2016-01-14 16:05:36

标签: java servlets encoding

在HttpServletRequest上调用getParameter时,我偶尔遇到此错误:

INFO: Character decoding failed. Parameter [SomeParameter] with value [SomeValue] has been ignored. Note that the name and value quoted here may be corrupted due to the failed decoding. Use debug level logging to see the original, non-corrupted values.
java.io.CharConversionException: isHexDigit
...

要查找此错误的来源,我想记录完整的请求网址,但问题是您在错误被抛出时“无法识别”,因为它是在getParameter方法中捕获的。 在getParameter方法之外,没有抛出错误,你可以捕获然后记录。

那么我有什么方法可以自己捕获这个编码错误吗?

注意:我知道导致错误的原因是,参数中的编码%是错误的。我只是不知道它来自哪里,因为它是源头中非常重要的位置。

1 个答案:

答案 0 :(得分:1)

这是Tomcat错误消息。

如果Tomcat无法解析参数,它会为Boolean.TRUE设置一个特殊的请求属性,您可以使用它来检测错误的参数:

boolean paramParseFailed = 
    request.getAttribute("org.apache.catalina.parameter_parse_failed") != null;

请注意,这仅在读取参数后设置,因为Tomcat会懒惰地填充参数。