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

Como seria o Update sem a presença do TopicoDTO?

Como seria a situação de efetuar um update sem o uso de um TopicoDTO?

Antes eu fazia da seguinte forma:

@PutMapping("/{id}")
public Topico update(@Valid @RequestBody Topico topico, @PathVariable Long id){
    Topico topicoAtual = topicoRepository.findById(id);
    topicoAtual.setNome(topico.getNome())
    ...
    ...
return topicoRepository.save(topicoAtual);
}

Mas agora, o findById retorna um Optinal e não permite o set. Como resolver isso? Já fiz com o findOne passando o ID e não funcionou.

2 respostas
solução!

Oi Alcimar,

Você precisa acessar o obejto topico dentro do Optional:

Optional<Topico> optional = topicoRepository.findById(id);
Topico topicoAtual = optional.get();

O seu código deve ficar assim então:

@PutMapping("/{id}")
@Transactional
public Topico update(@Valid @RequestBody Topico topico, @PathVariable Long id) {
    Optional<Topico> optional = topicoRepository.findById(id);

    Topico topicoAtual = optional.get();
    topicoAtual.setNome(topico.getNome())
    ...

    return topicoAtual;
}

Repare que o método precisa estar anotado com @Transactional, para o Spring disparar o update no banco de dados e não precisa chamar o save.

Bons estudos!

Excelente. Funcionou perfeitamente. Muito obrigado mais uma vez. :-)