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

Java EE (J2EE)

Войти
Регистрация
Восстановить пароль
 
xoraxax
541 / 538 / 109
Регистрация: 05.07.2013
Сообщений: 2,495
Завершенные тесты: 1
#1

Jackson and Enums - Java EE

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

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

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

Java SE Jackson Parser не работает как надо

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
korvin_
1396 / 1167 / 172
Регистрация: 28.04.2012
Сообщений: 4,227
30.12.2016, 19:49     Jackson and Enums #2
Цитата Сообщение от xoraxax Посмотреть сообщение
Каким образом объяснить Jacksonу, что он должен делать с этими енумами?
А что ты хочешь, чтобы он делал? REST-контроллер что ожидает?
xoraxax
541 / 538 / 109
Регистрация: 05.07.2013
Сообщений: 2,495
Завершенные тесты: 1
30.12.2016, 23:33  [ТС]     Jackson and Enums #3
пусть он ожидает, например, число, там где должен быть enum

Добавлено через 7 минут
А вообще не важно. Будем считать, что нужно объект преобразовать в json, а потом из полученного jsonа создать новый объект.
korvin_
1396 / 1167 / 172
Регистрация: 28.04.2012
Сообщений: 4,227
31.12.2016, 12:56     Jackson and Enums #4
xoraxax, э-м... Если не важно, то в чём проблема? Jackson by-default сериализует/десериализует enum'ы в/из JSON через Enum.name() (или, возможно, через Enum.toString(), но это вряд ли, т.к. toString можно переопределить и получить строку, не преобразуемую обратно в enum стандартным способом) и Enum.valueOf(String), т.е. ничего ему специально говорить не надо, если тебя это устраивает.
xoraxax
541 / 538 / 109
Регистрация: 05.07.2013
Сообщений: 2,495
Завершенные тесты: 1
31.12.2016, 13:56  [ТС]     Jackson and Enums #5
в том то и проблема что не десериализует

Добавлено через 2 минуты
т.е. можно, например, внутри енума создать мапку со всеми значениями, написать метод, который из мапки достает по имени нужный объект, и сказать jacksonу, что объекты надо создавать с помощью этого метода. Но как-то это слишком громоздко.
KEKCoGEN
Модератор
Эксперт Java
1873 / 1751 / 426
Регистрация: 28.12.2010
Сообщений: 7,100
31.12.2016, 14:22     Jackson and Enums #6
Цитата Сообщение от xoraxax Посмотреть сообщение
в том то и проблема что не десериализует
код покажите. Никаких проблем с сериализацией enum не должно быть в дефолтных настройках.
xoraxax
541 / 538 / 109
Регистрация: 05.07.2013
Сообщений: 2,495
Завершенные тесты: 1
31.12.2016, 16:53  [ТС]     Jackson and Enums #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. Получаем какое-то невнятное исключение.
KEKCoGEN
Модератор
Эксперт Java
1873 / 1751 / 426
Регистрация: 28.12.2010
Сообщений: 7,100
31.12.2016, 18:40     Jackson and Enums #8
xoraxax, какое исключение? Аннотация Data это Lombok? Напишите обычный мейн с сериализация чтобы точнее определить где проблема.
xoraxax
541 / 538 / 109
Регистрация: 05.07.2013
Сообщений: 2,495
Завершенные тесты: 1
31.12.2016, 21:06  [ТС]     Jackson and Enums #9
Хм, странно, без спринга в самом деле работает.
korvin_
1396 / 1167 / 172
Регистрация: 28.04.2012
Сообщений: 4,227
31.12.2016, 21:30     Jackson and Enums #10
Цитата Сообщение от xoraxax Посмотреть сообщение
Хм, странно, без спринга в самом деле работает.
Может, в спринге используется какая-то другая (может, старая) версия jackson, которая не умеет нормально enum'ы или работает с ними по-другому.

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

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