Сделайте десериализацию перечисления Spring Boot JSON строгой, чтобы она не преобразовывала недопустимые значения в нулеJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Сделайте десериализацию перечисления Spring Boot JSON строгой, чтобы она не преобразовывала недопустимые значения в нуле

Сообщение Anonymous »

Я использую Java Spring Boot @RestController с объектом, содержащим поля перечисления.
Spring автоматически десериализует JSON в объект MyRequest.

Код: Выделить всё

@RestController
public class MyController {
@PostMapping(path = "/operation")
public ResponseEntity operation(@Valid @RequestBody MyRequest request) {
...
}
}

public class MyRequest {
private MyEnum1 field1;
private MyEnum2 field2;
private MyEnum3 field3;
private MyEnum4 field4;
private MyEnum5 field5;
private MyEnum6 field6;
... // really a lot of various enum fields!
}

public enum MyEnum1 {
VAL1, VAL2, VAL3;
}
Проблема в том, что если JSON содержит полностью недопустимое значение поля enum, десериализатор автоматически преобразует их в ноль без каких-либо исключений.

Код: Выделить всё

{
"field1": "BLAHBLAH",
...
}
Это неудобно и опасно для пользователя.
Я знаю, что могу написать собственные десериализаторы JSON для каждого перечисления, но решение будет громоздким и неудобным. -elegant.
Есть ли способ глобально установить для десериализатора перечисления JSON «строгий режим», чтобы, если значение недопустимо, выдавалось исключение? Если да, то как и где?

РЕДАКТИРОВАТЬ:
Как правильно указано @x4rf41 в его (принятом) ответе , строгая оценка перечислений действительно включена по умолчанию. Я не заметил, что где-то в нашем коде она отключена:

Код: Выделить всё

featuresToEnable(new Object[]{DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL})
мораль этой истории, оглядываясь назад, заключается в том, что никогда не следует устанавливать функции десериализации JSON глобально для все приложение, когда вам нужно какое-то особое поведение, но всегда настраивайте собственный ObjectMapper для своих конкретных нужд.


Подробнее здесь: https://stackoverflow.com/questions/656 ... ntly-conve
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»