Request method 'GET' not supported

Pessoal, toda vez que tento fazer uma requisição do tipo “post” no método excluir eu recebo a seguinte mensagem " Request method ‘GET’ not supported". Quando eu faço a troca para o método get ele funciona. Como esse método muda o estado do servidor o correto seria usar post. Como eu faço para ele aceitar post?

Método Excluir

@PostMapping(value = "/excluir")
	public String excluir(@RequestParam("id") long id) {
		repositorio.deleteById(id);
		return "redirect:/listarClientes";
	}

Controller

@Controller

public class ClienteController {

@Autowired
private ClienteDAO repositorio;

@GetMapping("/form")
public String formCliente() {

	return "CadastrarUsuario";
}

@PostMapping(value = "/salvarCliente")
public String salvarCliente(@RequestParam(name = "rua") String rua, @RequestParam(name = "bairro") String bairro,
		@RequestParam(name = "numero") int numero,
		@RequestParam("cep") String cep, Cliente cliente) {
	Endereco endereco = new Endereco(rua, bairro, numero, cep);
	cliente.setEndereco(endereco);
	repositorio.save(cliente);
	return "redirect:/form";

}

@PostMapping(value = "/salvarClienteAlterado")
public String salvarClienteAlterado(@RequestParam(name = "rua") String rua,
		@RequestParam(name = "bairro") String bairro, @RequestParam(name = "numero") int numero,
		@RequestParam("cep") String cep, Cliente cliente) {
	Endereco endereco = new Endereco(rua, bairro, numero, cep);
	cliente.setEndereco(endereco);
	repositorio.save(cliente);
	return "redirect:/listarClientes";

}

@GetMapping(value = "/listarClientes")
public ModelAndView listarClientes() {
	ModelAndView modelo = new ModelAndView("ListarClientes");
	Iterable<Cliente> cliente = repositorio.findAll();
	modelo.addObject("cliente", cliente);
	return modelo;
}

@GetMapping(value = "/listarClientesID")
public ModelAndView listarCliente(@RequestParam("id") long id) {
	ModelAndView modelo = new ModelAndView("AlterarCliente");
	Optional<Cliente> clienteID = repositorio.findById(id);
	modelo.addObject("clientes", clienteID.get());

	return modelo;

}

@PostMapping(value = "/excluirCliente")
public String excluir(@RequestParam("id") long id) {
	repositorio.deleteById(id);
	return "redirect:/listarClientes";
}

}

Formulário

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>Lista De Clientes</h1>


    <table border="1" width = "100%">

    <tr><th>ID</th><th>NOME</th><th>CPF</th><th>RUA</th><th>BAIRRO</th><th>NÚMERO</th><th>CEP</th><td>ALTERAR</td> <td>EXCLUIR</td> </tr>
    <c:forEach var="listaClientes" items="${cliente}">
    <tr> <td><c:out value="${listaClientes.id}"></c:out></td> 
    <td><c:out value="${listaClientes.nome }"></c:out></td> 
    <td> <c:out value="${listaClientes.cpf }"></c:out> </td>
    <td> <c:out value="${listaClientes.endereco.rua }"></c:out> </td>
    <td> <c:out value="${listaClientes.endereco.bairro }"></c:out> </td>
    <td> <c:out value="${listaClientes.endereco.numero }"></c:out> </td>
    <td> <c:out value="${listaClientes.endereco.cep }"></c:out> </td>
    <td><a href="/alterarCliente?id=<c:out value="${listaClientes.id}"></c:out>"> Alterar Cliente </a></td>
    <td><a href="/excluir?id=<c:out value="${listaClientes.id}"></c:out>"> Excluir Cliente</a></td>
    </tr>
    </c:forEach>
    </table>
    </body>
    </html>

Todo link irá realizar uma requisição GET pedindo algo ao servidor. Isso é padrão.

Se vc quiser realizar uma requisição POST vc deve declarar um formulário informando o verbo a ser utilizado. Algo mais ou menos assim:

<td>
    <form method="post" action="/excluir?id=<c:out value="${listaClientes.id}">">
        <button type="submit">Excluir Cliente</button>
    </form>
</td>

Como é para remover algo do servidor, vc pode dá uma olhada no verbo DELETE para isso.

1 curtida

Fiz suas alterações e obtive sucesso no excluir. Resolvi fazer o mesmo para o alterar e estou recebendo esse erro:

Required request parameter 'id' for method parameter type long is not present

org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'id' for method parameter type long is not present

Alterações que fiz:

<td><form method="get" action="/listarClientesID?id=<c:out value="${listaClientes.id}"></c:out>">
<button type="submit"> Alterar </button>
</form>
</td>

<td><form method="post" action="/excluirCliente?id=<c:out value="${listaClientes.id}"></c:out>">
<button type="submit"> Excluir </button>
</form>
</td>

A ação de alterar deveria ser a /listarClientesID mesmo?

E pelo erro, é bem capaz que o método esteja esperando um parâmetro id que não foi informado. Como está implementada a ação de alterar?

Ele só ocorre este problema quando utilizo um button. Antes eu estava utilizando um link e ele funcionava normalmente chamando o formulário para alteração.

 @GetMapping(value = "/listarClientesID")
    	public ModelAndView listarCliente(@RequestParam("id") long id) {
    		ModelAndView modelo = new ModelAndView("AlterarCliente");
    		Optional<Cliente> clienteID = repositorio.findById(id);
    		modelo.addObject("clientes", clienteID.get());

    		return modelo;

    	}

formulário para alteração

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<h1>Alterar Cliente</h1>
<form action="/salvarClienteAlterado" method="post">

ID: <input type="number" required="required" name= "id" value='<c:out value="${clientes.id}"></c:out>'>
<br></br>
Nome: <input type="text" required="required" name="nome" value='<c:out value="${clientes.nome }"></c:out>'>
<br></br>
CPF: <input type="cpf" required="required" name="cpf" value='<c:out value="${clientes.cpf }"></c:out>'>
<br></br>
Rua: <input type="text" required="required" name="rua" value='<c:out value="${clientes.endereco.rua }"></c:out>'>
<br></br>
Bairro: <input type="text" required="required" name="bairro" value = '<c:out value="${clientes.endereco.bairro}"></c:out>'>
<br></br>
Número: <input type="number" required="required" name="numero"  value = '<c:out value="${clientes.endereco.numero}"></c:out>'>
<br></br>
CEP: <input type="text" required="required" name="cep"  value = '<c:out value="${clientes.endereco.cep}"></c:out>'>
<br></br>

<input type="submit" value="Salvar">


</form>

</body>
</html>

Vc não precisa de um form para realizar um GET. O link (todo link realiza um GET no servidor) é a forma correta de fazer msm (eu achei que o alterar fosse a alteração de fato, e não a chamada para a tela de alteração).

1 curtida

Entendi. Eu até já tinha deixado com o link mesmo. Eu só estava querendo entender pq através de um formulário ele não conseguia executar a ação. Obrigado pela ajuda e atenção! Outra coisa se não for incomodo, vc poderia explicar pq ele não executa a ação quando está dentro de um formulário ? (só por curiosidade mesmo).

1 curtida

O GET dentro do form, provavelmente não funcionou pq, dentro do form os query params deveriam, acredito, ser declarados na forma de input:

<form method="get" action="/listarClientesID">
    <input type="hidden" id="id" name="id" value="<c:out value="${listaClientes.id}"></c:out>">
    <button type="submit"> Alterar </button>
</form>
1 curtida

Realmente funcionou e entendi sua explicação! Muito obrigado pela ajuda. Foi de extrema importância em meu aprendizado.

1 curtida

pessoal, tentei seguir o processo acima e o meu alterar continua dando erro, sou novo na programação estou tentando aprender na raça rs
aqui estao os meu cod.

Meu form

<div class="container left">
			<h3 class="light-green-text text-darken-1">Alteração de Usuários</h3>
			<form th:action="@{/altUsuarios}"  method="post"
				><!-- onsubmit="return confirm('Confirma ação?')" -->
				<div class="row">
					<div class="input-field col s5">
						Nome:<input type="text" th:value=${usuario.nome} required="required" value="" name="nome">
					</div>
					<div class="input-field col s5">
						Senha:<input type="password" th:value=${usuario.senha} required="required" value="" name="senha">
					</div>
				</div>

				<div class="row">
					<div class="input-field col s8">
						Nivel de Acesso: <select name="nivelacesso" th:value=${usuario.nivelacesso} required="required"
							class="browser-default">
							<option value="" disabled selected>Escolha uma Opção</option>
							<option value="RULE_ADMIN">Administrador</option>
							<option value="RULE_USER">Usuário</option>
						</select>
					</div>
				</div>
				<button class="btn waves-effect light-green darken-1" type="submit"
					name="action">
					Salvar <i class="material-icons right">send</i>
				</button>
				<button class="btn waves-effect light-green darken-1" type="reset" 
					name="action">
					Limpar <i class="material-icons right">send</i>
				</button>
			</form>

meu metodo

	@RequestMapping("usuarios/altUsuarios/{id}")
    public String altUsuarios(@PathVariable("id") Integer id, Model model) {
        System.out.println(id);
        Usuarios usuario = re.findByIdusuario(id);
        model.addAttribute("usuario", usuario);

        return "usuarios/formUsuarios";
    }
	
	@RequestMapping("/altUsuarios")
	public ModelAndView atualiza(Usuarios usuarios) {
	    re.save(usuarios);
	    //return "redirect:/cadUsuarios";
	    return new ModelAndView("redirect:/cadUsuarios");
	}

Este é o erro de duplicidade na chave

org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "uk_exw5vja1pgfobcpqtldhnx6uv"
  Detalhe: Key (nome)=(Joao) already exists.
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2674) ~[postgresql-42.3.1.jar:42.3.1]
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2364) ~[postgresql-42.3.1.jar:42.3.1]
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:354) ~[postgresql-42.3.1.jar:42.3.1]
	at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:484) ~[postgresql-42.3.1.jar:42.3.1]
	at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:404) ~[postgresql-42.3.1.jar:42.3.1]
	at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:162) ~[postgresql-42.3.1.jar:42.3.1]
	at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:130) ~[postgresql-42.3.1.jar:42.3.1]
	at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:197) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:46) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3375) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3908) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:107) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.engine.spi.ActionQueue.lambda$executeActions$1(ActionQueue.java:478) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) ~[na:na]
	at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:475) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:344) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:40) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1402) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:493) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3285) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2420) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:449) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:183) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$300(JdbcResourceLocalTransactionCoordinatorImpl.java:40) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:281) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:101) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
	at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:562) ~[spring-orm-5.3.14.jar:5.3.14]
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:743) ~[spring-tx-5.3.14.jar:5.3.14]
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:711) ~[spring-tx-5.3.14.jar:5.3.14]
	at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:654) ~[spring-tx-5.3.14.jar:5.3.14]
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:407) ~[spring-tx-5.3.14.jar:5.3.14]
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.14.jar:5.3.14]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14]
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.14.jar:5.3.14]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14]
	at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:174) ~[spring-data-jpa-2.6.0.jar:2.6.0]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14]
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.14.jar:5.3.14]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14]
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.14.jar:5.3.14]
	at jdk.proxy29/jdk.proxy29.$Proxy300.save(Unknown Source) ~[na:na]
	at com.example.consultorio.controller.ConUsuarios.Salvar(ConUsuarios.java:46) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.14.jar:5.3.14]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.14.jar:5.3.14]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.14.jar:5.3.14]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.14.jar:5.3.14]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.14.jar:5.3.14]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.14.jar:5.3.14]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.14.jar:5.3.14]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.14.jar:5.3.14]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.14.jar:5.3.14]
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.14.jar:5.3.14]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) ~[tomcat-embed-core-9.0.56.jar:4.0.FR]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.14.jar:5.3.14]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.56.jar:4.0.FR]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.56.jar:9.0.56]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.14.jar:5.3.14]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.14.jar:5.3.14]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.14.jar:5.3.14]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.14.jar:5.3.14]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.14.jar:5.3.14]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.14.jar:5.3.14]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
	at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]

Provavelmente seu código está tentando inserir um outro usuário com um nome que já está cadastrado, e vc tem uma constraint para impedir mais de um usuário com o mesmo nome. Por isso ocorreu o erro.

Ao realizar o save, o ID da entidade está preenchida?