Ao realuzar o PUT, os paramentros passados são apresentados conforme o esperado, mas ao conferir em GET, apenas o novo parametro para "mensagem" é atualizado, o "titulo" passa a ser "null"
Este é o controller
ackage br.com.alura.forum.controller;
import java.net.URI;
import java.util.List;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.http.ResponseEntity;
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.PutMapping;
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.DetalhesDoTopicoDto;
import br.com.alura.forum.controller.dto.TopicoDto;
import br.com.alura.forum.controller.form.AtualizacaoForm;
import br.com.alura.forum.controller.form.TopicoForm;
import br.com.alura.forum.controller.repostery.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.findByCurso_Nome(nomeCurso);
return TopicoDto.converter(topicos);
}
}
@PostMapping
public ResponseEntity<TopicoDto> cadastrar(@RequestBody 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);
}
@PutMapping("/{id}")
@Transactional
public ResponseEntity<TopicoDto> atualizar(@PathVariable Long id, @RequestBody @Valid AtualizacaoForm form){
Topico topico=form.Atualizar(id, topicoRepository);
return ResponseEntity.ok(new TopicoDto(topico));
}
}
Este é o atualizaForm
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.modelo.Topico;
import br.com.alura.forum.repository.TopicoRepository;
public class AtualizacaoForm {
@NotNull @NotEmpty @Length(min=5)
private String titulo;
@NotNull @NotEmpty @Length(min=10)
private String mensagem;
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 Topico Atualizar(Long id, TopicoRepository topicoRepository) {
Topico topico=topicoRepository.getReferenceById(id);
topico.setTitulo(this.titulo);
topico.setMensagem(this.mensagem);
return topico;
}
}