17
respostas

o que colocar dentro das anotações???

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.

17 respostas

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.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

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:

  1. No meu superior Project, verifica se a opção Build Automatically está marcada
  2. Ainda nesse mesmo menu, clique na opção Clean para recompilar o projeto
  3. Clica com o botão direito no projeto e vai em: Maven -> Update Project

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:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

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