olá estou com uma duvida e queria saber se alguem consegue me ajudar.
meu código n dá o erro no Postman. olhei todas as classes mais n encontrei nada fora do normal.
alguém poderia me ajudar prfv.
olá estou com uma duvida e queria saber se alguem consegue me ajudar.
meu código n dá o erro no Postman. olhei todas as classes mais n encontrei nada fora do normal.
alguém poderia me ajudar prfv.
manda seu codigo, aqui do controller que está dando erro , o seu pom, form, dto
"id": 4, "titulo": "", "mensagem": "Texto da mensagem", "dataCriacao": "2022-07-21T09:09:22.0451734"
esse em cima é meu resultado final no Postman.
4.0.0 org.springframework.boot spring-boot-starter-parent 2.7.1 br.com.alura forum 0.0.1-SNAPSHOT forum Demo project for Spring Boot <java.version>17</java.version> org.springframework.boot spring-boot-starter-web
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
esse é meu pom.
package br.com.alura.forum.controller.form;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import org.hibernate.validator.constraints.Length;
import br.com.alura.forum.controller.repository.CursoRepository; import br.com.alura.forum.modelo.Curso; import br.com.alura.forum.modelo.Topico;
public class TopicoForm {
@NotNull @NotEmpty @Length(min = 5)
private String titulo;
@NotNull @NotEmpty @Length(min = 10)
private String mensagem;
@NotNull @NotEmpty
private String nomeCurso;
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
public String getNomeCurso() {
return nomeCurso;
}
public void setNomeCurso(String nomeCurso) {
this.nomeCurso = nomeCurso;
}
public Topico converter(CursoRepository cursorepository) {
Curso curso = cursorepository.findByNome(nomeCurso);
return new Topico(titulo, mensagem, curso);
}
}
tópico form.
package br.com.alura.forum.controller.dto;
import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors;
import br.com.alura.forum.modelo.Topico;
public class TopicoDTO {
private Long id;
private String titulo;
private String mensagem;
private LocalDateTime dataCriacao;
public TopicoDTO(Topico topico) {
this.id = topico.getId();
this.titulo = topico.getTitulo();
this.mensagem = topico.getMensagem();
this.dataCriacao = topico.getDataCriacao();
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
public LocalDateTime getDataCriacao() {
return dataCriacao;
}
public void setDataCriacao(LocalDateTime dataCriacao) {
this.dataCriacao = dataCriacao;
}
public static List<TopicoDTO> converter(List<Topico> topicos) {
return topicos.stream().map(TopicoDTO::new).collect(Collectors.toList());
}
}
tópico DTO.
package br.com.alura.forum.controller;
import java.net.URI;
import java.util.List;
import javax.validation.Valid.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.util.UriComponentsBuilder;
import br.com.alura.forum.controller.dto.TopicoDTO;
import br.com.alura.forum.controller.form.TopicoForm;
import br.com.alura.forum.controller.repository.CursoRepository;
import br.com.alura.forum.modelo.Topico;
import br.com.alura.forum.repository.TopicoRepository;
@RestController
@RequestMapping("/topicos")
public class TopicosController {
@Autowired
private TopicoRepository topicoRepository;
@Autowired
private CursoRepository cursoRepository;
@GetMapping
public List <TopicoDTO> lista(String nomeCurso) {
if (nomeCurso == null) {
List<Topico> topicos = topicoRepository.findAll();
return TopicoDTO.converter(topicos);
} else {
List<Topico> topicos = topicoRepository.findByCursoNome(nomeCurso);
return TopicoDTO.converter(topicos);
}
}
@PostMapping
public ResponseEntity<TopicoDTO> cadastrar(@RequestBody @Valid TopicoForm form, UriComponentsBuilder uriBuilder) {
Topico topico = form.converter(cursoRepository);
topicoRepository.save(topico);
URI uri = uriBuilder.path("/topicos/{id}").buildAndExpand(topico.getId()).toUri();
return ResponseEntity.created(uri).body(new TopicoDTO(topico));
}
}
tópicos controller.
Oi Wander,
No seu pom.xml
está faltando a dependência de validação, conforme explicado nessa atividade: https://cursos.alura.com.br/course/spring-boot-api-rest/task/98525
coloquei a dependencia e o Postman ainda continua dando o resultado mesmo sem os dados.
Manda um print aqui da sua requisição no postman.
Estranho, está tudo certinho e era pra dar o erro de validação :D
Por via das dúvidas, finalize a aplicação no Eclipse e faça esses procedimentos:
Depois disso inicialize novamente a aplicação e dispare a requisição no Postman.
fiz tudo e mesmo assim continua funcionando.
Consegue compartilhar seu projeto? Pode ser via GitHub ou link compartilhado do google drive
Oi Wander,
O problema é que no seu projeto você acabou criando 2 pacotes que não deveria:
Apague esses pacotes javax.validation e org.hibernate.validator.constraints que o problema resolverá
tirei os pacotes e tive o erro 500.
"timestamp": "2022-07-22T12:26:00.619+00:00",
"status": 500,
"error": "Internal Server Error",
"trace": "java.lang.Error: Unresolved compilation problem: \n\tValid cannot be resolved to a type\n\r\n\tat br.com.alura.forum.controller.TopicosController.cadastrar(TopicosController.java:49)\r\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\r\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\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:1067)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\r\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\r\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\r\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\r\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\r\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\r\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\r\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\r\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)\r\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\r\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)\r\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\r\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)\r\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1787)\r\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n\tat
Agora ta erro de compilação na classe Controller.
Verifica se o import da anotação @Valid foi feito