1
resposta

Após colocar @Valid no meu Controller só me retorna Bad Request

segue abaixo:

import javax.validation.constraints.NotNull; import br.com.alura.forum.modelo.Curso; import br.com.alura.forum.modelo.Topico; import br.com.alura.forum.repository.CursoRepository;

public class Topicform { @NotNull private String titulo; @NotNull private String mensagem; @NotNull 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);
}

}

import java.net.URI; import java.util.List;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; 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.RestController; import org.springframework.web.util.UriComponentsBuilder;

import br.com.alura.forum.controller.dto.TopicoDto; import br.com.alura.forum.controller.form.Topicform; import br.com.alura.forum.modelo.Topico; import br.com.alura.forum.repository.CursoRepository; 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 @Valid Topicform 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));
}

}

Postman body:

{

"titulo":"oioioi", "mensagem":"Teste validação", "nomeCuros":"HTML 5"

}

OBS: Retorno sempre é Bad Request com os campos preenchidos ou não.

1 resposta

Oi Sillas,

O problema é o json que você está enviando no Postman, que está com o nome do campo errado.

Ao invés de nomeCurso está nomeCuros.