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

linha não compila

Olá boa tarde estou com um problema

Topico topico = form.converter(cursoRepository);

está linha n está compilando e eu escrevi tudo direitinho

o que faço?

5 respostas

Oi Wander,

Posta aqui como está o seu código. Do controller e da classe form

package br.com.alura.forum.controller; import java.util.List;

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.source.ConfigurationPropertyName.Form; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController;

import br.com.alura.forum.controller.dto.TopicoDTO; import br.com.alura.forum.controller.form.TopicoForm; import br.com.alura.forum.controller.repository.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.findByCursoNome(nomeCurso);
        return TopicoDTO.converter(topicos);

    }
}

@PostMapping
public void cadastrar(@RequestBody TopicoForm topico) {
    Topico topico = form.converter(cursoRepository);
    topicoRepository.save(topico);

}

}

esse é o controller

package br.com.alura.forum.controller.form;

import br.com.alura.forum.controller.repository.CursoRepository; import br.com.alura.forum.modelo.Curso; import br.com.alura.forum.modelo.Topico;

public class TopicoForm {

private String titulo;
private String mensagem;
private String nomeCurso;


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 String getNomeCurso() {
    return nomeCurso;
}
public void setNomeCurso(String nomeCurso) {
    this.nomeCurso = nomeCurso;
}

public Topico converter(CursoRepository cursorepository) {

    Curso curso = cursorepository.findByNome(nomeCurso);
    return new Topico(titulo, mensagem, curso);
}

}

e esse é o Form

solução!

O problema está na assinatura do método no controller:

public void cadastrar(@RequestBody TopicoForm topico)

O parametro está com nome topico, mas deveria ser form:

public void cadastrar(@RequestBody TopicoForm form)

funcionou obrigado