As you already found out, the fromHttpUrl method uses a regular expression to "guess" the component from the URL string given. The regular expression is not (and could not be) a 100% correct at this process, especially considering the fact that the string can also be unencoded (i.e. the string might contain characters that are invalid in a particular part of the URL). This is the case in your example: the # character is not valid as part of the path, and therefore should be escaped with the percent encoding into %23.
The way to solve this is to either use the individual component methods on the builder, so that it knows when a particular component starts and where the next one begins. Alternatively, you can percent-escape the # character in the string you pass to fromHttpURl. Like so:
UriComponentsBuilder builder = UriComponentsBuilder.newInstance();
UriComponents result = builder.scheme("http").host("whatever.com").path("/path/#/angularpath").queryParam("queryparam", "value").build();
String redirectionUrl = "http://whatever.com/path/%23/angularpath?queryparam=value";
UriComponents result = UriComponentsBuilder.fromHttpUrl(redirectionUrl).build();