Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Java EE (J2EE)

Войти
Регистрация
Восстановить пароль
 
xoraxax
791 / 742 / 171
Регистрация: 05.07.2013
Сообщений: 3,415
Завершенные тесты: 1
#1

Jackson and Enums - Java EE

30.12.2016, 15:36. Просмотров 252. Ответов 10
Метки нет (Все метки)

Есть несколько Enumов типа такого
Java
1
2
3
public enum PaymentStatus {
    QUEUED, PROCESSED;
}
Есть pojo, в котором есть поля, заданные такими енумами.
Надо эту поджу отдавать/получать в rest-контроллер.

Каким образом объяснить Jacksonу, что он должен делать с этими енумами?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2016, 15:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Jackson and Enums (Java EE):

Jackson Parser не работает как надо - Java SE
Всем привет! Кто может сказать - почему Jackson парсер моей реализации собирает null значения из json фалйа? Класс парсера: ...

Jackson Parser не работает как надо - Java SE
Всем привет! Кто может сказать - почему Jackson парсер моей реализации собирает null значения из json фалйа? Класс парсера: ...

Jackson Parser не работает как надо - Java SE
Всем привет! Кто может сказать - почему Jackson парсер моей реализации собирает null значения из json фалйа? Класс парсера: ...

Jackson Parser не работает как надо - Java SE
Всем привет! Кто может сказать - почему Jackson парсер моей реализации собирает null значения из json фалйа? Класс парсера: ...

Jackson Parser не работает как надо - Java SE
Всем привет! Кто может сказать - почему Jackson парсер моей реализации собирает null значения из json фалйа? Класс парсера: ...

Jackson Parser не работает как надо - Java SE
Всем привет! Кто может сказать - почему Jackson парсер моей реализации собирает null значения из json фалйа? Класс парсера: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
korvin_
1832 / 1301 / 202
Регистрация: 28.04.2012
Сообщений: 4,688
30.12.2016, 19:49 #2
Цитата Сообщение от xoraxax Посмотреть сообщение
Каким образом объяснить Jacksonу, что он должен делать с этими енумами?
А что ты хочешь, чтобы он делал? REST-контроллер что ожидает?
0
xoraxax
791 / 742 / 171
Регистрация: 05.07.2013
Сообщений: 3,415
Завершенные тесты: 1
30.12.2016, 23:33  [ТС] #3
пусть он ожидает, например, число, там где должен быть enum

Добавлено через 7 минут
А вообще не важно. Будем считать, что нужно объект преобразовать в json, а потом из полученного jsonа создать новый объект.
0
korvin_
1832 / 1301 / 202
Регистрация: 28.04.2012
Сообщений: 4,688
31.12.2016, 12:56 #4
xoraxax, э-м... Если не важно, то в чём проблема? Jackson by-default сериализует/десериализует enum'ы в/из JSON через Enum.name() (или, возможно, через Enum.toString(), но это вряд ли, т.к. toString можно переопределить и получить строку, не преобразуемую обратно в enum стандартным способом) и Enum.valueOf(String), т.е. ничего ему специально говорить не надо, если тебя это устраивает.
0
xoraxax
791 / 742 / 171
Регистрация: 05.07.2013
Сообщений: 3,415
Завершенные тесты: 1
31.12.2016, 13:56  [ТС] #5
в том то и проблема что не десериализует

Добавлено через 2 минуты
т.е. можно, например, внутри енума создать мапку со всеми значениями, написать метод, который из мапки достает по имени нужный объект, и сказать jacksonу, что объекты надо создавать с помощью этого метода. Но как-то это слишком громоздко.
0
KEKCoGEN
Эксперт Java
1921 / 1799 / 436
Регистрация: 28.12.2010
Сообщений: 7,235
31.12.2016, 14:22 #6
Цитата Сообщение от xoraxax Посмотреть сообщение
в том то и проблема что не десериализует
код покажите. Никаких проблем с сериализацией enum не должно быть в дефолтных настройках.
0
xoraxax
791 / 742 / 171
Регистрация: 05.07.2013
Сообщений: 3,415
Завершенные тесты: 1
31.12.2016, 16:53  [ТС] #7
Хз чем поможет код показать, вроде просто все.
Вот это в рест-контроллере
Java
1
2
3
4
   @Override
    public Pojo create(@RequestBody Pojo pojo) {
        return pojo;
    }
Вот pojo
Java
1
2
3
4
5
@Data
public class Pojo {
    private Long id;
    private PojoType type;
}
Java
1
2
3
public enum PojoType {
  TYPE1, TYPE2;
}
Создаем объект, ObjectMapperом делаем json. Берем полученный json, отдаем в метод create. Получаем какое-то невнятное исключение.
0
KEKCoGEN
Эксперт Java
1921 / 1799 / 436
Регистрация: 28.12.2010
Сообщений: 7,235
31.12.2016, 18:40 #8
xoraxax, какое исключение? Аннотация Data это Lombok? Напишите обычный мейн с сериализация чтобы точнее определить где проблема.
0
xoraxax
791 / 742 / 171
Регистрация: 05.07.2013
Сообщений: 3,415
Завершенные тесты: 1
31.12.2016, 21:06  [ТС] #9
Хм, странно, без спринга в самом деле работает.
0
korvin_
1832 / 1301 / 202
Регистрация: 28.04.2012
Сообщений: 4,688
31.12.2016, 21:30 #10
Цитата Сообщение от xoraxax Посмотреть сообщение
Хм, странно, без спринга в самом деле работает.
Может, в спринге используется какая-то другая (может, старая) версия jackson, которая не умеет нормально enum'ы или работает с ними по-другому.

Цитата Сообщение от xoraxax Посмотреть сообщение
Получаем какое-то невнятное исключение.
Хотелось бы всё-таки увидеть стэктрейс.
0
KEKCoGEN
Эксперт Java
1921 / 1799 / 436
Регистрация: 28.12.2010
Сообщений: 7,235
31.12.2016, 21:47 #11
Цитата Сообщение от xoraxax Посмотреть сообщение
без спринга в самом деле работает.
либо спринг использует другой сериалайзер, либо как сказал korvin_, у вас конфликт версий и откуда-то приходит старая версия
0
Yandex
Объявления
31.12.2016, 21:47
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru