Jettyでクエリ文字列のエンコーディングを設定する方法

Java Servletをやるとき request.setCharacterEncoding(enc) がPOSTパラメータにしか効かず、クエリ文字列は相変わらずUTF-8でしか取得できないことは有名で、それに対してTomcatでは useBodyEncodingForURI="true" という設定があるのも有名だと思います。
今日は同じことを Jetty の場合はどうすればいいかを調べたのでメモφ(。。


やり方は以下のように setAttribute で org.eclipse.jetty.server.server.Request.queryEncoding *1 を設定してやるか、

request.setAttribute("org.eclipse.jetty.server.server.Request.queryEncoding", enc);

もしくはJettyのRequestクラスかどうか確認した上で、setQueryEncoding(enc) をしてやるかのどちらかでいけます。

if(request instanceof org.eclipse.jetty.server.Request) {
  ((org.eclipse.jetty.server.Request) request).setQueryEncoding(enc);
}

*1:古いバージョンのjettyでは org.mortbay.jetty.Request.queryEncoding だった。