在我的Servlet中,我收到带参数的GET请求。然后我尝试解码参数并记录可能的编码错误:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String json = req.getParameter("json");
try{
String jsonDecoded = java.net.URLDecoder.decode(json, "UTF-8");
} catch(UnsupportedEncodingException | IllegalArgumentException e){
// log error somewhere
}
}
问题是,代码的try / catch部分是无用的,因为参数已经从getParameter函数处理,并且到达第5行的字符串已经被解码。如果我使用无效参数调用servlet,我会在catalina.out中记录错误,并且该变量具有空值:
Aug 17, 2015 11:22:07 AM org.apache.tomcat.util.http.Parameters processParameters
INFO: Character decoding failed. Parameter [json] with value [...] 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.
Note: further occurrences of Parameter errors will be logged at DEBUG level.
我想要的是将错误记录到我自己的日志中(例如使用log4j处理它)。是否可以将该行日志从catalina.out重定向到我自己的记录器(请注意我不想从catalina.out文件中记录ALL)?作为替代方案,是否可以从HttpServletRequest获取未处理的参数,然后按我喜欢的方式处理它?</ p>
答案 0 :(得分:0)
您应该使用getQueryString方法,因为您想自己解码该值。它返回 -
包含查询字符串的String;如果URL不包含查询字符串,则返回null。该值不会被容器解码。
下面的内容应该这样做
String queryStr = URLDecoder.decode(request.getQueryString(), "UTF-8");