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 だった。