JAX-RSの@FormParamでShiftJISを受け取れない
JAX-RS(REST Easy)を使ってウェブAPIを作成しています。
あるシステムの<form>
からデータを受け取るAPIを作成しているのですが、日本語が文字化けしてしまいます。
そのシステムの画面の文字コードはShiftJISです。
@Path("test")
public class TestApi {
@POST
@Path("hoge")
@Produces("text/html")
public String hoge(@FormParam("name") name) {
...
}
}
上記のようなコードなのですが、<form>
から "a" という文字を送り、上記のAPI上でEclipseのデバッガからnameの値を見てみると、きちんと"a"が入っています。
しかし "あ" を送ると、" " という空白?文字になってしまいます。
なお、文字列の長さは2であり、codePointAt
を使って中を覗いてみると
name.codePointAt(0) -> 130
name.codePointAt(1) -> 160
となっています。
まさにこれはShiftJISの「あ」ですので、これをbyte配列に変換すれば、「ShiftJIS文字列 "あ" のbyte配列から文字列を生成する」ということはできますので、一応、問題は解決します。
byte[] bytes = new byte[name.length()];
for (int i = 0; i < name.length(); i++) {
bytes[i] = (byte)(name.codePointAt(i));
}
String name2 = new String(bytes, "sjis");
ただShiftJISの文字列をJavaで受け取りたいだけなのに、ここまでしなければならないのでしょうか?
他により良い手段というか、なにかアノテーション一発で文字コードを指定できるとか、そういう方法があれば知りたいです。