charset
プロパティがContent-Type
ヘッダーで指定されている場合、Jersey 2.0 (サーブレット 3.1 を使用) はパラメーターをデコードできないようです。
たとえば、次のエンドポイントを考えてみます。
@POST
@Path("/hello")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Response hello(@FormParam("name") String name) {
System.out.println(name);
return ok();
}
このcurlリクエストは機能します:
curl -X POST -H "content-type: application/x-www-form-urlencoded" -d "name=tom" http://localhost:8080/sampleapp/hello
代わりに、次のリクエストは機能せず、name
パラメーターは次のとおりですnull
。
curl -X POST -H "content-type: application/x-www-form-urlencoded; charset=UTF-8" -d "name=tom" http://localhost:8080/sampleapp/hello
charset=UTF-8
コンテンツ タイプに追加すると、コードが壊れると思います。
編集:
これがバグである場合に備えて、公式チケットをオープンしました: https://java.net/jira/browse/JERSEY-1978