Hi. I think that HttpRequestBodyToParamMap class has a problems.
HttpRequestBodyToParamMap uses URI#getQuery().
this method decodes the query string without specifying an encoding(probably decoded by the platform's default). and decoded query string is decoded once more by URLDecoder later.
This is a problem for non ascii query string, for example Windows-31J which is still used widely in Japan.
So instead of URI#getQuery(), use URI#getRawQuery() here. URL decoding is happily performed by URLDecoder later, and only once
Here is a patch for this problem and functional tests.