似乎没有办法处理由 dropwizard 中的 URI 解析失败引起的 ServletException(使用版本 2.0.18)。
curl -i -s -k -X $'GET' $'https://localhost/api/search/query?searchString=%bf'
HTTP/1.1 400 错误请求
服务器:nginx
日期:2021 年 5 月 6 日星期四 09:17:06 GMT
内容类型:text/html;charset=iso-8859-1
内容长度:751
连接:keep-alive
Cache-Control :必须重新验证,无缓存,无存储
严格传输安全:max-age=31536000;包括子域
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 400 Unable to parse URI query</title>
</head>
<body><h2>HTTP ERROR 400 Unable to parse URI query</h2>
<table>
<tr><th>URI:</th><td>/search/query</td></tr>
<tr><th>STATUS:</th><td>400</td></tr>
<tr><th>MESSAGE:</th><td>Unable to parse URI query</td></tr>
<tr><th>SERVLET:</th><td>jersey</td></tr>
<tr><th>CAUSED BY:</th><td>javax.servlet.ServletException: Filtered request failed.</td></tr>
<tr><th>CAUSED BY:</th><td>org.eclipse.jetty.http.BadMessageException: 400: Unable to parse URI query</td></tr>
<tr><th>CAUSED BY:</th><td>org.eclipse.jetty.util.Utf8Appendable$NotUtf8Exception: Not valid UTF8! byte Bf in state 0</td></tr>
</table>
</body>
</html>
这里主要关注的是码头正在发送堆栈跟踪异常,这可能是一个安全问题。
尝试了 ExceptionMappers,但它不起作用,因为我认为异常是从应用程序范围之外抛出的。如何避免这种情况?