Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2022-11-02 10:25:13.418 ERROR 13246 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed

Olá

Estou com o seguinte erro:

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeTive que criar a classe "DetalhesDoTopicoDto" direto na packpage Controller pois quando estava criando na controller.dto ele estava reclamando com a mensagem "Criar class "DetalhesDoTopicoDto".

Minhas classes ficaram assim:

package br.com.alura.forum.controller;

import java.net.URI;
import java.util.Arrays;
import java.util.List;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
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.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
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.modelo.Curso;
import br.com.alura.forum.modelo.Topico;
import br.com.alura.forum.repository.CursoRepository;
import br.com.alura.forum.repository.TopicoRepository;

@RestController
@RequestMapping("/topicos")
public class TopicoController {

    @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));        
    }

    @GetMapping("/{id}")
    public DetalhesDoTopicoDto detalhar(@PathVariable Long id) {
        Topico topico = topicoRepository.getReferenceById(id);
            return new DetalhesDoTopicoDto(topico);
            }
}
package br.com.alura.forum.controller;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import br.com.alura.forum.controller.dto.RespostaDto;
import br.com.alura.forum.modelo.StatusTopico;
import br.com.alura.forum.modelo.Topico;

public class DetalhesDoTopicoDto {

    private Long id;
    private String titulo;
    private String mensagem;
    private LocalDateTime dataCriacao;
    private String nomeAutor;
    private StatusTopico status;
    private List<RespostaDto> repostas;

    public DetalhesDoTopicoDto(Topico topico) {
        this.id = topico.getId();
        this.titulo = topico.getTitulo();
        this.mensagem = topico.getMensagem();
        this.dataCriacao = topico.getDataCriacao();
        this.nomeAutor = topico.getAutor().getNome();
        this.status = topico.getStatus();
        this.repostas = new ArrayList<>();
        this.repostas.addAll(topico.getRespostas().stream().map(RespostaDto::new).collect(Collectors.toList()));
    }

Quando vou testar no Postmanw ele aparece assim:

Onde eu posso ter errado?

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

1 resposta
solução!

Oi André,

Pela primeira mensagem de erro você tentou rodar o projeto mas ele já etava em execução, e por isso deu a mensagem de conflito na porta 8080.

Na aba console do Eclipse clica no ícone de X para ver se tem outra instância rodando e finalize todas:

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

Na sua classe DetalhesDoTopicoDto está faltando os métodos getters dos atributos.