|
Jackson JsonSerializer unum как несколько полей, а не объект json, как?
|
|||
---|---|---|---|
#18+
Привет всем! Есть объект с полем типа enum Код: java 1. 2. 3. 4. 5. 6. 7.
enum MyType Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Делаем сериализатор: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Вызываем в тесте String json = new ObjectMapper().writeValueAsString(экземпляр MyParams ); Нужно получить объект JSON вида: Код: powershell 1. 2. 3. 4. 5. 6. 7.
По факту enum оборачивается в объект: Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. 9.
Как вот поля енама поднять на уровень к полям основного объекта? Если тупо убрать gen.writeStartObject(); и gen.writeEndObject(); то ошибка "Can not write a field name, expecting a value", что ожидаемо. Можно аннотацию @JsonSerialize(using = MyParamsSerializer.class) поставить над полем енама и переписать, но это всё равно даст в результате объект, а не просто набор полей енама в json Никак не нагуглю варианты и по докам, что-то толком не могу пока найти, а еще десиализатор надо будет потом добавлять :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2021, 10:26 |
|
Jackson JsonSerializer unum как несколько полей, а не объект json, как?
|
|||
---|---|---|---|
#18+
Изначально объект содержал отдельно поля enum как свои поля, но при рефакторинге решил убрать их в enum, т.к. много где эти поля как параметры передаются, а хотелось бы сократить, да и задать какие-то значения в enum постоянные, чтобы использовать в других местах. Т.е. менять модель на Фронте пока что нельзя, надо согласовывать, что долго, поэтому в код приехал сериализатор :) Может другие решения уже есть?... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2021, 10:33 |
|
Jackson JsonSerializer unum как несколько полей, а не объект json, как?
|
|||
---|---|---|---|
#18+
Nixic Можно аннотацию @JsonSerialize(using = MyParamsSerializer.class) поставить над полем енама и переписать, но это всё равно даст в результате объект, а не просто набор полей енама в json ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2021, 11:42 |
|
Jackson JsonSerializer unum как несколько полей, а не объект json, как?
|
|||
---|---|---|---|
#18+
Что ж.. пришлось вернуть поля в основной класс, и игнорить enum, а значения полей заполнять в конструкторе, такое себе решение(временно-постоянное), но хотя бы не сломается использование этого класса другими сервисами и в каких-то там запросах... Код: java 1. 2. 3.
Код: java 1. 2. 3. 4. 5.
Но десериализацию нужно всё же кастомную запилить, чтобы из поля code enum определялся, ну это вроде как мелочи уже. Всем, спасибо :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2021, 11:43 |
|
Jackson JsonSerializer unum как несколько полей, а не объект json, как?
|
|||
---|---|---|---|
#18+
Андрей Панфилов, Вот ведь :) Поторопился. Спасибо! Сейчас JsonUnwrapped посмотрю, вроде бы оно... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2021, 11:44 |
|
Jackson JsonSerializer unum как несколько полей, а не объект json, как?
|
|||
---|---|---|---|
#18+
Супер! Андрей, спасибо ещё раз, все развернулось положилось как надо, без всяких костылей :) Интересно, а десериализация также гладко пройдёт... Сейчас тест напишу :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2021, 11:52 |
|
|
start [/forum/topic.php?fid=59&msg=40113497&tid=2120307]: |
0ms |
get settings: |
8ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
43ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
129ms |
get tp. blocked users: |
1ms |
others: | 370ms |
total: | 562ms |
0 / 0 |