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

Possível problema da mensagem.

No caso do validador exception é retorna uma string direta com a mensagem, nos outros que não são personalizados é retornado um json, como no exemplo: Outra exception:

[
    {
        "field": "email",
        "message": "não deve estar em branco"
    }
]

Validador:

E-mail já cadastrado.

Isso pode gerar um problema posteriormente? se sim, como eu mudo para um json ou objeto de modo a padronizar?

2 respostas

Olá, Matheus! Tudo joia?

Você levantou uma questão muito importante sobre a padronização das respostas das exceções.

Sim, pode gerar problemas no futuro se as respostas de suas exceções não forem padronizadas. Por exemplo, se um cliente da sua API estiver esperando um JSON e receber uma string, isso pode causar erros inesperados no lado do cliente.

Para padronizar suas respostas, você pode criar uma classe que represente a estrutura do JSON que você deseja retornar. Por exemplo:

public class ErroResposta {
    private String campo;
    private String mensagem;

    // Getters e setters
}

Então, no seu tratador de exceções, você pode retornar uma instância dessa classe em vez de uma string. Por exemplo:

@ExceptionHandler(ValidacaoException.class)
public ResponseEntity<ErroResposta> tratarErroValidacao(ValidacaoException ex) {
    ErroResposta erro = new ErroResposta();
    erro.setCampo("email");
    erro.setMensagem(ex.getMessage());
    return ResponseEntity.badRequest().body(erro);
}

Dessa forma, todas as suas exceções retornarão um JSON com a mesma estrutura, facilitando o tratamento dessas exceções do lado do cliente.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.
solução!

Tem esse jeito, mas eu fiz um record como o do token JWT, toda vez que eu passaria uma resposta fora do padrão ou algo assim eu a utilizava, ficando tudo em json.

public record MessageError(String message) {
}

Exemplo:

 @ExceptionHandler(NoHandlerFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public ResponseEntity handleNoHandlerFoundException(NoHandlerFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new MessageError("Recurso não encontrado: " + ex.getRequestURL()));
    }