java
runtime_error
ai_generated
true
java.lang.IllegalArgumentException: No enum constant
ID: java/enum-constant-not-found
90%Fix Rate
92%Confidence
70Evidence
2023-01-01First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| 17 | active | — | — | — |
Root Cause
Enum.valueOf() was called with a string that does not match any constant in the enum. Common when deserializing data (JSON, database values, configs) that contains a value not present in the enum definition.
genericWorkarounds
-
92% success Add the missing enum constant, or use a custom fromString() method that handles unknown values gracefully
1. Check the error message for the unrecognized value. 2. If it is a legitimate new value, add it to the enum. 3. For forward compatibility, create a static fromString() method that uses a Map lookup and returns a default/UNKNOWN constant for unrecognized values. 4. For Jackson deserialization, use @JsonEnumDefaultValue on an UNKNOWN constant and enable DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE.
-
88% success Use @JsonCreator or a custom deserializer for robust enum parsing from external data
1. Add a @JsonCreator static method that accepts a String and handles case-insensitive matching and aliases. 2. Store enum values in a static Map for O(1) lookup. 3. For database values, use JPA's @Converter (AttributeConverter) instead of relying on Enum.valueOf(). 4. Add validation at the data ingestion boundary rather than deep in business logic.
Dead Ends
Common approaches that don't work:
-
Adding a catch for IllegalArgumentException and returning null
65% fail
Returning null defers the problem — now the caller has a null where it expected a valid enum value, likely causing a NullPointerException later. The root cause (mismatched data vs. enum definition) remains.
-
Making enum names case-insensitive by converting all stored data to uppercase
55% fail
This only fixes case mismatch issues but does not handle genuinely missing enum constants from schema evolution. It also risks breaking other data consumers that depend on the original case.
Error Chain
Leads to:
Preceded by:
Frequently confused with: