Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Enum Especialidad - mejorada

Hola a todas y a todos. Les comparto el siguiente código del Enum de Especialidad con el cual desde el front-end pueden usar minúsculas, mayúsculas, acentos o sin acentos las especialidades. Espero les sirva.

import com.fasterxml.jackson.annotation.JsonCreator;

import java.text.Normalizer;

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

    /**
     * Busca una especialidad basándose en una cadena de entrada,
     * manejando mayúsculas/minúsculas, acentos y espacios.
     *
     * @param input La cadena de entrada a buscar.
     * @return La especialidad correspondiente si se encuentra, o null si no.
     */
    @JsonCreator
    public static Especialidad fromString(String input) {
        if (input == null || input.trim().isEmpty()) {
            return null;
        }

        // 1. Normalizar a NFD y quitar diacríticos (acentos)
        String normalizedInput = Normalizer.normalize(input, Normalizer.Form.NFD)
                .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");

        // 2. Convertir a mayúsculas para comparación sin distinción de mayúsculas/minúsculas
        String upperCaseInput = normalizedInput.toUpperCase().trim();

        for (Especialidad especialidad : Especialidad.values()) {
            // Normalizar también el nombre del enum para la comparación
            String normalizedEnumName = Normalizer.normalize(especialidad.name(), Normalizer.Form.NFD)
                    .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
            if (normalizedEnumName.equals(upperCaseInput)) {
                return especialidad;
            }
        }
        return null; // No se encontró una especialidad coincidente
    }


}
1 respuesta

Hola Miguel, espero que estés bien

¡Gracias por compartir tu código con la comunidad! Parece que has hecho un gran trabajo al mejorar la forma en que se manejan las especialidades en tu aplicación. Al permitir que el front-end envíe las especialidades en cualquier formato de texto (minúsculas, mayúsculas, con o sin acentos), estás haciendo que la integración sea mucho más flexible y amigable.

Tu implementación del método fromString en el enum Especialidad es una solución elegante para normalizar las entradas y facilitar la comparación. Esto es especialmente útil cuando se trabaja con datos que pueden venir de diferentes fuentes y formatos.

Aquí tienes un ejemplo de cómo podrías utilizar este enum en un contexto más amplio:

public class Medico {
    private String nombre;
    private String email;
    private String documento;
    private Especialidad especialidad;

    public Medico(String nombre, String email, String documento, String especialidadStr) {
        this.nombre = nombre;
        this.email = email;
        this.documento = documento;
        this.especialidad = Especialidad.fromString(especialidadStr);
    }

    // Getters y otros métodos...
}

Al crear un nuevo objeto Medico, puedes pasar la especialidad como una cadena de texto en cualquier formato, y tu método fromString se encargará de convertirlo al enum correspondiente.

Espero que esta implementación te sea útil y que continúes disfrutando del desarrollo con Spring Boot. ¡Espero haber ayudado y buenos estudios!