Ele me perguntou no privado porque funcionou. Colando aqui a explicação detalhada para quem precisar:
O negócio é o seguinte. Toda URL tem algumas regrinhas de escrita (isso em inglês é chamado de encoding, que é a palavra para codificação). Elas servem para evitar que caracteres especiais (tais como a ?, &, = ou o %) não sejam se tornem ambíguos.
Por exemplo, digamos que você queria procurar por um nome como ben&jerry. Sem as regras, a url ficaria assim:
http://localhost:8080/users/search?nome=ben&jerry
Agora, você deve lembrar que o & serve para separar dois parâmetros. Então, como ele saberia que esse & é parte do nome, e não um separador para uma busca de uma segunda variável chamada Jerry?
As regras de codificação resolvem isso. Uma delas é que esses caracteres não podem ser usados diretamente. Eles precisam ser substituídos por um sinal de %, seguido do código do caracter. Então, ao invés de escrever ben&jerry, você escreve:
http://localhost:8080/users/search?nome=ben%26jerry
Sendo esse “%26” um comando de “use o caracter de código 26”, no caso o &.
Bem, mas como o % é justamente o caractere usado para representar outros caracteres, como representamos o %? Do mesmo jeito. Temos que usar o % seguido do código dele em questão.
Existem sites em que você pode colocar um texto e ele gera essa codificação para você. Um exemplo é esse aqui:
URL Encode
Encode to URL-encoded format or decode from it with various advanced options. Our site has an easy to use online tool to convert your data.
Se eu entrar lá e colocar algo como
Vinícius%de Mendonça
Ele vai mostrar que a maneira correta de se colocar isso em uma URL é:
Vin%C3%ADcius%25de%20Mendon%C3%A7a