Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Q&A

Welcome to Software Development on Codidact!

Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.

Post History

75%
+4 −0
Q&A Json deserialization of enum, forbid int

This is something that could go really wrong. I remember using this, and it was fine initially, until the enum in question evolved, and the ordinals changed, so the values didn't correspond anymore...

posted 3mo ago by ɯıpɐʌ‭  ·  edited 3mo ago by ɯıpɐʌ‭

Answer
#2: Post edited by user avatar ɯıpɐʌ‭ · 2024-09-24T15:14:35Z (3 months ago)
  • This is something that could go really wrong. I remember using this, and it was fine initially, until the `enum` in question _evolved_, and the ordinals changed, so the values didn't correspond anymore to what it was expecting.
  • Anyway, long story short, if you would like to prevent this system-wide (and I recommend it), [configure](https://github.com/FasterXML/jackson-databind/wiki/Deserialization-Features) `ObjectMapper` to prevent using the Enum's ordinals with `DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS`.
  • Something like this should work:
  • ```java
  • final var mapper = new ObjectMapper();
  • mapper.configure(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS, true);
  • ```
  • If you are using `Spring Boot` you can achieve this modifying `application.yaml`:
  • ```yaml
  • spring:
  • jackson:
  • deserialization:
  • fail-on-numbers-for-enums: true
  • ```
  • This is something that could go really wrong. I remember using this, and it was fine initially, until the `enum` in question _evolved_, and the ordinals changed, so the values didn't correspond anymore to what the initial assumption was.
  • Anyway, long story short, if you would like to prevent this system-wide (and I recommend it), [configure](https://github.com/FasterXML/jackson-databind/wiki/Deserialization-Features) `ObjectMapper` to prevent using the Enum's ordinals with `DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS`.
  • Something like this should work:
  • ```java
  • final var mapper = new ObjectMapper();
  • mapper.configure(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS, true);
  • ```
  • If you are using `Spring Boot` you can achieve this modifying `application.yaml`:
  • ```yaml
  • spring:
  • jackson:
  • deserialization:
  • fail-on-numbers-for-enums: true
  • ```
#1: Initial revision by user avatar ɯıpɐʌ‭ · 2024-09-24T15:13:49Z (3 months ago)
This is something that could go really wrong. I remember using this, and it was fine initially, until the `enum` in question _evolved_, and the ordinals changed, so the values didn't correspond anymore to what it was expecting.

Anyway, long story short, if you would like to prevent this system-wide (and I recommend it), [configure](https://github.com/FasterXML/jackson-databind/wiki/Deserialization-Features) `ObjectMapper` to prevent using the Enum's ordinals with `DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS`.

Something like this should work:

```java
final var mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS, true);
```

If you are using `Spring Boot` you can achieve this modifying `application.yaml`:

```yaml
spring:
  jackson:
    deserialization:
      fail-on-numbers-for-enums: true
```