Refactoring code to throw a single exception per function
UnsupportedEncodingException can easily be avoided by wrapping the call that might throw it:

try {
  return java.net.URLDecoder.decode(body, "UTF-8");
} catch (UnsupportedEncodingException ex) {
  throw new IllegalStateException(ex);
}


Indeed, "UTF-8" is one of most common encodings and that would be really surprising that such exception is thrown here. Semantically, it is close to an illegal state of the application: one would hardly imagine that it cannot support this encoding nowadays.

Since the chained IllegalStateException is a RuntimeException, you will be able to remove it from the signatures of the methods.