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

Validar curso para cadastrar um tópico

Gostaria de saber como seria possível validar se o curso informado para cadastrar um tópico de fato existe?. Caso não exista, como retornar para o usuário que "o curso informado não foi encontrado". No caso esse retorno tinha quer ser em Json.

3 respostas

Oi Wellington,

Você precisa realizar uma validação para checar se o nome do curso informado existe no banco de dados. Pode ser no controller ou em uma classe service essa validação, e caso não exista o curso retornar um BAD_REQUEST(Erro 400) para o cliente.

Rodrigo, No caso quando é informado uma categoria inexistente é lançada a exceção "SQLIntegrityConstraintViolationException". Na camada de validação, eu passei essa classe como parâmetro da anotação @ExceptionHandler e também do método da classe e realizei o tratamento. Seria essa uma boa prática ?

solução!

Oi Wellington,

Eu prefiro ter um tratamento específico, para devolver uma mensagem de erro mais específica ao cliente, ao invés de uma mensagem genérica padrão utilizada em um Handler.

Algo assim:

@PostMapping
@Transactional
public ResponseEntity<TopicoDto> cadastrar(@RequestBody @Valid TopicoForm form, UriComponentsBuilder uriBuilder) {
    try {
        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));
    } catch(CursoInvalidoException e) {
        return ResponseEntity.badRequest().body(e.getMessage());
    }
}
public Topico converter(CursoRepository cursoRepository) {
    Curso curso = cursoRepository.findByNome(nomeCurso);
    if (curso == null) {
        throw new CursoInvalidoException("Curso informado não existe!");
    }
    return new Topico(titulo, mensagem, curso);
}