Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Método getOne não traz Curso e Usuario

@RestController @RequestMapping(value = "/topicos") public class TopicosController {

@Autowired
TopicoRepository topicoRepository;

@Autowired
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 DetalhesTopicoDto detalhar(@PathVariable Long id){
    Topico topico = topicoRepository.getOne(id);
    return new DetalhesTopicoDto(topico);
}

}

Na aula 6 do curso ocorreu o seguinte problema.
Estou usando Java 11 e o s dados de curso e Usuário não são trazidos pelo método getOne, porém no método findAll funciona normalmente poderiam me ajudar ? 
insira seu código aqui

insira seu código aqui

insira seu código aqui
4 respostas

Oi Valdevir,

Você está chamando o endpoint para detalhar tópico e o json devolvido não tem os dados do curso e usuário? ou acontece algum erro quando chama a api?

Oi Rodrigo; Isso mesmo, estou usando chamando o EndPoint para detalhar o tópico o objeto devolvido no método getOne(id), não é devolvido com os objetos preenchidos.

solução!

Altere seu método detalhar para:

@GetMapping("/{id}")
public DetalhesTopicoDto detalhar(@PathVariable Long id) {
    Topico topico = topicoRepository.findById(id).get();
    return new DetalhesDoTopicoDto(topico);
}

Confira também se sua classe DetalhesTopicoDto está assim:

public class DetalhesTopicoDto {

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

    public DetalhesTopicoDto(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;
    }

}

E veja se resolve.

Opa, funcionou. Valew demais Rodrigo.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software