1
resposta

Validar enum

Boa tarde, Se for passado uma especialidade que não existe, dá a seguinte exception: 2023-04-24T16:38:27.213-03:00 WARN 14240 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type med.voll.api.domain.medico.Especialidade from String "teste": not one of the values accepted for Enum class: [ORTOPEDIA, DERMATOLOGIA, CARDIOLOGIA, GINECOLOGIA]]

Como validar se está sendo passada uma especialidade válida?

1 resposta

Olá Álvaro, tudo bem?

Para validar se está sendo passada uma especialidade válida, você pode utilizar a anotação @JsonCreator na classe de enumeração Especialidade e criar um método estático que recebe uma string e retorna a enum correspondente.

Segue um exemplo:

public enum Especialidade {
    ORTOPEDIA,
    DERMATOLOGIA,
    CARDIOLOGIA,
    GINECOLOGIA;

    @JsonCreator
    public static Especialidade fromString(String value) {
        for (Especialidade especialidade : Especialidade.values()) {
            if (especialidade.name().equalsIgnoreCase(value)) {
                return especialidade;
            }
        }
        throw new IllegalArgumentException("Especialidade inválida: " + value);
    }
}

Dessa forma, quando o Spring tentar desserializar a string para a enum Especialidade, o método fromString será chamado e irá verificar se a string corresponde a alguma das enums existentes. Caso não corresponda, será lançada uma exceção com a mensagem "Especialidade inválida".

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software