Teniendo en cuenta la siguiente enumeración:
public enum EnumBrand { visa("VISA", EnumCardType.visa), mastercard("MASTERCARD", EnumCardType.mastercard), amex("AMERICAN EXPRESS", EnumCardType.amex), maestro("MAESTRO", EnumCardType.mastercard), unknown("UNKNOWN", EnumCardType.visa); private String name; private EnumCardType cardType; EnumBrand(String name, EnumCardType cardType) { this.name = name; this.cardType = cardType; } private static final Map<String, EnumBrand> h = new HashMap<>(); static { for (EnumBrand enumBrand : EnumBrand.values()) { h.put(enumBrand.getName(), enumBrand); } } public static EnumBrand fromName(String name) { try { EnumBrand type = h.get(name); if (type == null) return EnumBrand.unknown; return type; } catch (Exception e) { return EnumBrand.unknown; } } public String getName() { return name; } public EnumCardType getCardType() { return cardType; } }El siguiente código funciona en un contexto de prueba unitaria.
Cuando se usa en el contexto de Spring, getCardType siempre devuelve un valor nulo.
EnumBrand enumBrand = EnumBrand.fromName("VISA"); EnumCardType enumCardType = enumBrand.getCardType();Supongo que el inicio estático está involucrado, pero me gustaría entender por qué exactamente esto no funciona con Spring.