Gson сериализация Spring бобы - PullRequest
2 голосов
/ 12 мая 2011

Я использую Gson 1.6 и Spring Framework 3.0 для веб-приложения Java на WebSphere 6.1 . У меня есть несколько бинов Spring, для которых фактическим экземпляром является прокси CGLIB . Когда я пытаюсь сериализовать эти bean-компоненты через Gson, не примитивные свойства класса не сериализуются. Вместо этого я получаю что-то вроде:

{
   "CGLIB$BOUND":true,
   "CGLIB$CONSTRUCTED":true,
   "booleanProperty":true,
   "anotherBooleanProperty":true,
}

, где я ожидал чего-то большего, чем

{
   "stringProperty":"stringValue"
   "integerObjectProperty":17,
   "booleanProperty":true,
   "anotherBooleanProperty":true,
}

Когда я сериализую незащищенный POJO, вывод будет именно таким, как я ожидал. Как я могу заставить Gson генерировать ожидаемый результат?

Ответы [ 2 ]

5 голосов
/ 12 мая 2011

Я бы сказал, что ваша проблема - результат плохой практики.

Spring Beans обычно определяются поведением, а не состоянием.И вам следует только сериализовать классы, которые имеют состояние, а не поведение.

Выполнить рефакторинг вашего кода, перенести состояние из объектов Beans в объекты-значения и сериализовать их.

1 голос
/ 14 мая 2011

Я хотел бы попробовать другой процессор JSON, Jackson (http://jackson.codehaus.org),, поскольку он имеет некоторую поддержку для работы с объектами прокси cglib. А Spring поддерживает Jackson, поэтому у вас меньше кода для записи, по сравнению с версией на основе gson.

...