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
}
}