Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
TopicoController
@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.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));
}
@RequestMapping(value = "/{id}")
public TopicoDto detalhar(@PathVariable Long id) {
Topico topico = topicoRepository.getById(id);
return new TopicoDto(topico);
}
}
Manoel, boa tarde!
O Spring Data precisa que a classe tenha um construtor default, ou seja, um construtor vazio. Crie um construtor vazio na classe Topico ou deixe ela sem método construtor que ela criará um default. Após isso, funcionará.