,
,
Oi!
Pode ser problema com o Lombok. Verifica esse tópico para ser se é o seu caso: https://cursos.alura.com.br/forum/topico-no-construtor-os-gets-estao-em-vermelho-pedindo-pra-criar-um-metodo-porem-na-aula-nao-tem-467215?hasAccessMGM=true
Opa !! Boa tarde Rodrigo, meu Lombok esta instalado corretamente
No intelliJ o meu codigo está perfeitamente igual ao da aula, o erro é apenas no insomnia, inclusive não estou conseguindo criar uma "HTTP Request", eu encolhi a aba e ela nao quer mais abrir novamente
Ok. Manda aqui a stack trace completa, copiando do IntelliJ.
Mando por aqui mesmo ? todos ou so de algum especifico ?
Pode mandar aqui a stacktrace, pois no print do insomnia saiu apenas uma pedaço dela e não dá para saber mais detalhes da Exception.
so um momento, meu insomnia não ta querendo me mostrar a lista da lateral com meus testes da tabela medico(depois que diminuir ele nao quis voltar mais)
org.springframework.orm.jpa.JpaSystemException: Unable to locate constructor for embeddable 'med.voll.api.endereco.Endereco'\r\n\tat org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:341)\r\n\tat org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:241)\r\n\tat org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:560)\r\n\tat org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)\r\n\tat org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:343)\r\n\tat org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:160)\r\n\tat org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)\r\n\tat org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:165)\r\n\tat org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)\r\n\tat org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223)\r\n\tat jdk.proxy4/jdk.proxy4.$Proxy128.save(Unknown Source)\r\n\tat med.voll.api.controller.MedicoController.cadastrar(MedicoController.java:24)\r\n\tat java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)\r\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:580)\r\n\tat org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359)\r\n\tat org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)\r\n\tat org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n\tat org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:380)\r\n\tat org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)\r\n\tat org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)\r\n\tat org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:727)\r\n\tat med.voll.api.controller.MedicoController$$SpringCGLIB$$0.cadastrar()\r\n\tat java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)\r\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:580)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891)\r\n\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1088)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:978)\r\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n\tat jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n\tat at
Manda aqui o código da suas classes MedicoController, Medico, Endereco, DadosCadastroMedico e DadosEndereco
package med.voll.api.controller;
import jakarta.validation.Valid;
import med.voll.api.medico.DadosCadastroMedico;
//import med.voll.api.medico.DadosListagemMedico;
import med.voll.api.medico.Medico;
import med.voll.api.medico.MedicoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("medicos")
public class MedicoController {
@Autowired
private MedicoRepository repository;
@PostMapping
@Transactional
public void cadastrar(@RequestBody @Valid DadosCadastroMedico dados) {
repository.save(new Medico(dados));
}
//@GetMapping
//public List<DadosListagemMedico> listar() {
// return repository.findAll().stream().map(DadosListagemMedico::new).toList();
// }
}
package med.voll.api.medico;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import med.voll.api.endereco.Endereco;
@Table(name = "medicos")
@Entity(name = "Medico")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = "id")
public class Medico {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private String email;
private String telefone;
private String crm;
@Enumerated(EnumType.STRING)
private Especialidade especialidade;
@Embedded
private Endereco endereco;
public Medico(DadosCadastroMedico dados) {
this.nome = dados.nome();
this.email = dados.email();
this.telefone = dados.telefone();
this.crm = dados.crm();
this.especialidade = dados.especialidade();
this.endereco = new Endereco(dados.endereco());
}
}
package med.voll.api.endereco;
import jakarta.persistence.Embeddable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Embeddable
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class Endereco {
private String logradouro;
private String bairro;
private String cep;
private String numero;
private String complemento;
private String cidade;
private String uf;
public Endereco(DadosEndereco dados) {
this.logradouro = dados.logradouro();
this.bairro = dados.bairro();
this.cep = dados.cep();
this.uf = dados.uf();
this.cidade = dados.cidade();
this.numero = dados.numero();
this.complemento = dados.complemento();
}
}
package med.voll.api.medico;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import med.voll.api.endereco.DadosEndereco;
public record DadosCadastroMedico(
@NotBlank
String nome,
@NotBlank
@Email
String email,
@NotBlank
String telefone,
@NotBlank
@Pattern(regexp = "\\d{4,6}")
String crm,
@NotNull
Especialidade especialidade,
@NotNull @Valid DadosEndereco endereco) {
}
package med.voll.api.endereco;
import jakarta.persistence.Embeddable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Embeddable
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class Endereco {
private String logradouro;
private String bairro;
private String cep;
private String numero;
private String complemento;
private String cidade;
private String uf;
public Endereco(DadosEndereco dados) {
this.logradouro = dados.logradouro();
this.bairro = dados.bairro();
this.cep = dados.cep();
this.uf = dados.uf();
this.cidade = dados.cidade();
this.numero = dados.numero();
this.complemento = dados.complemento();
}
}
Se precisar de mais alguma coisa, é so avisar, mas eu ja subtitui o @Getter, pra fazer o Getters e Setters de forma manual, inclusive tentei fazer um sout pra mostrar o debug do @Embeddable, mas não posso fazer um sout o negocio nao ta reconhecendo esse comando, não sei o pq
O código está certinho. Como a exception indica que não achou o construtor, estou achando que pode ser um problema do Lombok no seu Intellij.
Abre as configurações (atalho: CTRL + ALT + S) e verifica essa opção conforme o print:
Depois disso faça um rebuild no projeto: Botão direito no projeto -> Rebuild Module. Reinicie o projeto e veja se vai resolver.
Permanece o erro... acho que darei continuidade ao curso normalmente, e depois vejo em outra computador