spring mvc: преобразовать свойство json в DTO в Enum - PullRequest
0 голосов
/ 28 мая 2019

Я бы хотел, чтобы строка, отправленная с клиента, была преобразована в соответствующее значение Enum.

Учитывая:

public enum TheEnum {
    One,
    Two
}

при нажатии bindsToParams?boolVal=false&stringVal=foobar&enumVal=one

@Controller
//..
public void bindsToParams(
    @RequestParam Boolean boolVal,
    @RequestParam String stringVal,
    @RequestParam TheEnum enumVal) {
        // this works. enumVal created correctly
}

Я бы хотел, чтобы такое же преобразование перечисления происходило, когда перечисление является свойством DTO, а входящая полезная нагрузка - json.Итак, со следующим DTO:

public BagOfProps {
    Boolean boolVal;
    String stringVal;
    TheEnum enumVal;
}

При отправке: {"boolVal":false,"stringVal":"foobar",enumVal: "One"}

@Controller
//..
public void bindsToObject(
    @RequestBody BagOfProps bag) {
        // unmarshalling of boolVal, stringVal works
        // but bag.enumVal is null
}

Что мне делать?

Спасибо.

1 Ответ

0 голосов
/ 29 мая 2019

Нашел проблему.

Десериализация вложенного перечисления на самом деле работает из коробки. Причина, по которой это не сработало, заключалась в том, что в полезной нагрузке json имя свойства enum отличалось от имени переменной в DTO:

Я отправлял:

{"boolVal":false,"stringVal":"foobar",enumVal: "One"}

Пока DTO был фактически:

public BagOfProps {
    Boolean boolVal;
    String stringVal;
    TheEnum notTheSameNameAsEnumVal;
}

НТН

...