Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
2971 / 2513 / 778
Регистрация: 05.07.2013
Сообщений: 12,169
1

Jackson and Enums

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


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

Каким образом объяснить Jacksonу, что он должен делать с этими енумами?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.12.2016, 15:36
Ответы с готовыми решениями:

Spring feign jackson timezone
Собсно есть приложение с сабжем. При вызове фейном метода, передаем туда объект (класс объекта не...

Считывание нескольких объектов из jackson
добрый день стоит задача, одним махом передать несколько разных объектов через GSON {...

Spring Jackson. force date format
Приходится работать с чужими классами, надо сделать так, чтобы спринг всегда использовал тот формат...

Java Json Jackson десериализация дженерики
Хочу сделать так, чтоб этот метод «convertResponceInObjects» работал с разными объектами, но не...

10
3276 / 2338 / 425
Регистрация: 28.04.2012
Сообщений: 7,823
30.12.2016, 19:49 2
Цитата Сообщение от xoraxax Посмотреть сообщение
Каким образом объяснить Jacksonу, что он должен делать с этими енумами?
А что ты хочешь, чтобы он делал? REST-контроллер что ожидает?
0
2971 / 2513 / 778
Регистрация: 05.07.2013
Сообщений: 12,169
30.12.2016, 23:33  [ТС] 3
пусть он ожидает, например, число, там где должен быть enum

Добавлено через 7 минут
А вообще не важно. Будем считать, что нужно объект преобразовать в json, а потом из полученного jsonа создать новый объект.
0
3276 / 2338 / 425
Регистрация: 28.04.2012
Сообщений: 7,823
31.12.2016, 12:56 4
xoraxax, э-м... Если не важно, то в чём проблема? Jackson by-default сериализует/десериализует enum'ы в/из JSON через Enum.name() (или, возможно, через Enum.toString(), но это вряд ли, т.к. toString можно переопределить и получить строку, не преобразуемую обратно в enum стандартным способом) и Enum.valueOf(String), т.е. ничего ему специально говорить не надо, если тебя это устраивает.
0
2971 / 2513 / 778
Регистрация: 05.07.2013
Сообщений: 12,169
31.12.2016, 13:56  [ТС] 5
в том то и проблема что не десериализует

Добавлено через 2 минуты
т.е. можно, например, внутри енума создать мапку со всеми значениями, написать метод, который из мапки достает по имени нужный объект, и сказать jacksonу, что объекты надо создавать с помощью этого метода. Но как-то это слишком громоздко.
0
Эксперт Java
2361 / 2191 / 558
Регистрация: 28.12.2010
Сообщений: 8,577
31.12.2016, 14:22 6
Цитата Сообщение от xoraxax Посмотреть сообщение
в том то и проблема что не десериализует
код покажите. Никаких проблем с сериализацией enum не должно быть в дефолтных настройках.
0
2971 / 2513 / 778
Регистрация: 05.07.2013
Сообщений: 12,169
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
Эксперт Java
2361 / 2191 / 558
Регистрация: 28.12.2010
Сообщений: 8,577
31.12.2016, 18:40 8
xoraxax, какое исключение? Аннотация Data это Lombok? Напишите обычный мейн с сериализация чтобы точнее определить где проблема.
0
2971 / 2513 / 778
Регистрация: 05.07.2013
Сообщений: 12,169
31.12.2016, 21:06  [ТС] 9
Хм, странно, без спринга в самом деле работает.
0
3276 / 2338 / 425
Регистрация: 28.04.2012
Сообщений: 7,823
31.12.2016, 21:30 10
Цитата Сообщение от xoraxax Посмотреть сообщение
Хм, странно, без спринга в самом деле работает.
Может, в спринге используется какая-то другая (может, старая) версия jackson, которая не умеет нормально enum'ы или работает с ними по-другому.

Цитата Сообщение от xoraxax Посмотреть сообщение
Получаем какое-то невнятное исключение.
Хотелось бы всё-таки увидеть стэктрейс.
0
Эксперт Java
2361 / 2191 / 558
Регистрация: 28.12.2010
Сообщений: 8,577
31.12.2016, 21:47 11
Цитата Сообщение от xoraxax Посмотреть сообщение
без спринга в самом деле работает.
либо спринг использует другой сериалайзер, либо как сказал korvin_, у вас конфликт версий и откуда-то приходит старая версия
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.12.2016, 21:47

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Json (Jackson) значение вместо объекта
Подскажите, как с помощью аннотаций можно упростить объект до значения? На примере: есть класс ...

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

Использование "сложных" слов в enums
Всем привет! Когда пишу простые слова, типа кот, собака, рысь в Enum - все ок Но когда *соб*...

Java Json jackson разбить на части и засунуть в массив
Помогите пож-та разбить мою Json строку на три части при помощи jackson Есть Json: { ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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