Hello to everyone.
I am having a problem with MultiValueMap.
I am trying to get a MultiValueMap<MyEnum, String> map as input of a GET request, but Spring gives me a MultiValueMap<String, String> cast to MultiValueMap<MyEnum, String> (idk how he does that).
So there is an inconsistency somehow, and every string passed as a parameter is used as key even if it isn't part of MyEnum.
For instance, if I try to get the values like map.get(MyEnum.X) it returns nothing, while if I do map.get(MyEnum.X.toString()) it works.
The funny thing here is that map.get() wants a value of MyEnum and not a String...
In practice, if my enum is {banana, apple, pear} and I pass strawberry=1 as a parameter in the request, the resulting map will be:
{
strawberry; 1
}
even if strawberry is not part of the enum.
I fixed this by getting as input MultiValueMap<String, String>, but I decided to report this issue anyway because the fact that an element that is not part of a given enum is used as key value looks suspicious and may lead to errors.
Comment From: sbrannen
This is by design.
The key type for a MultiValueMap passed as an argument to a controller's handler method is always String. Only the value type can vary.
The following are the supported types for the keys and values of a MultiValueMap passed as an argument to a handler method.
MultiValueMap<String, String>MultiValueMap<String, MultipartFile>MultiValueMap<String, javax.servlet.http.Part>
Search for "MultiValueMap" in the Web Servlet and Web Reactive sections of the reference manual for details and examples.