Estou com um problema, na hora que faço a requisição por Id (método: detalhar) pois está me retornando o erro 500, só que quando eu faço a requisição do findAll(método: lista) ele me retorna todos os tópicos normalmente, segue os trechos:
Erro da requisição:
Requisição do findAll:
TopicosController:
package br.com.alura.forum.controller;
import br.com.alura.forum.controller.dto.DetalhesDoTopicoDTO;
import br.com.alura.forum.controller.dto.TopicoDTO;
import br.com.alura.forum.controller.form.TopicoForm;
import br.com.alura.forum.model.Topico;
import br.com.alura.forum.repository.CursoRepository;
import br.com.alura.forum.repository.TopicoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.UriComponentsBuilder;
import javax.validation.Valid;
import java.net.URI;
import java.util.List;
@RestController
@RequestMapping(value = "/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 uriComponentsBuilder){
Topico topico = form.converter(cursoRepository);
topicoRepository.save(topico);
URI uri = uriComponentsBuilder.path("/topicos/{id}").buildAndExpand(topico.getId()).toUri();
return ResponseEntity.created(uri).body(new TopicoDTO(topico));
}
@GetMapping(value = "/{id}")
public DetalhesDoTopicoDTO detalhar(@PathVariable Long id){
Topico topico = topicoRepository.getReferenceById(id);
return new DetalhesDoTopicoDTO(topico);
}
}
DetalhesDoTopicoDTO
package br.com.alura.forum.controller.dto;
import br.com.alura.forum.model.StatusTopico;
import br.com.alura.forum.model.Topico;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class DetalhesDoTopicoDTO {
private Long id;
private String titulo;
private String mensagem;
private LocalDateTime dataCriacao;
private String nomeAutor;
private StatusTopico status;
private List<RespostaDTO> respostas;
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.respostas = new ArrayList<>();
this.respostas.addAll(topico.getRespostas().stream().map(RespostaDTO::new).collect(Collectors.toList()));
}
public Long getId() {
return id;
}
public String getTitulo() {
return titulo;
}
public String getMensagem() {
return mensagem;
}
public LocalDateTime getDataCriacao() {
return dataCriacao;
}
public String getNomeAutor() {
return nomeAutor;
}
public StatusTopico getStatus() {
return status;
}
public List<RespostaDTO> getRespostas() {
return respostas;
}
}
Já revirei o fórum todo e a internet inteira em busca da solução desse problema e nada...Aguardo retorno!