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