@RequestParam Required String parameter 'nome' is not present

O erro MissingServletRequestParameterException: Required String parameter 'nome' is not present indica que o parâmetro esperado “nome” não está sendo fornecido na requisição HTTP, entretanto como pode ser visualizado no print o parâmetro é passado.
E estou seguindo o livro da casa do código Back-end java .

os métodos:

na class UserService
public List queryByName(String name) {
List usuarios = userRepository.queryByNomeLike(name);
return usuarios
.stream()
.map(DTOConverter::convert)
.collect(Collectors.toList());
}

na class UserController

@GetMapping(“/user/search”)
public List queryByName(
@RequestParam(name=“nome”, required = true)
String nome) {
return userService.queryByName(nome);
}

na class UserRepository

public interface UserRepository extends JpaRepository<User, Long> {
User findByCpf(String cpf);
List queryByNomeLike(String name);
}

url para acessar o endpoint
http://localhost:8080/user/search?nome=mar%

saída na console

não consigo compreender porque persisti o erro 400, me notificando que o parêmetro nome não esta presente . agradeço desde já a comunidade.

Este erro acontece porque o sinal % tem significado especial em uma URL.

Este sinal é usado para codificar outros valores e do jeito que vc usou, com ele sozinho, ficou mal formado.

Se vc quer que o valor mar% chegue na sua aplicação, sua URL deveria ser assim:

http://localhost:8080/user/search?nome=mar%25

Pois o código %25 representa um % literal.

1 curtida