在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方法之外,没有抛出错误,你可以捕获然后记录。
那么我有什么方法可以自己捕获这个编码错误吗?
注意:我知道导致错误的原因是,参数中的编码%是错误的。我只是不知道它来自哪里,因为它是源头中非常重要的位置。
答案 0 :(得分:1)
这是Tomcat错误消息。
如果Tomcat无法解析参数,它会为Boolean.TRUE
设置一个特殊的请求属性,您可以使用它来检测错误的参数:
boolean paramParseFailed =
request.getAttribute("org.apache.catalina.parameter_parse_failed") != null;
请注意,这仅在读取参数后设置,因为Tomcat会懒惰地填充参数。