我不时在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会延迟填充参数。