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.
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!
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.
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 ?
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);
}