我不时在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
...


为了找到此错误的根源,我想记录完整的请求url,但是问题是,抛出该错误时您无法“识别”,因为它被getParameter方法捕获。
在getParameter方法之外,没有引发您可以捕获然后记录的错误。

那么我有什么办法可以自己捕获此编码错误?

注意:我知道是什么导致了错误,这是参数内部编码错误的%。我只是不知道它从哪里来,因为它在源头中非常重要。

最佳答案

这是Tomcat错误消息。

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

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


请注意,这是在读取参数之后才设置的,因为Tomcat会延迟填充参数。

10-07 23:07