|
|
|
Как конвертировать Java bean в JSON, выбрав только некоторые поля
|
|||
|---|---|---|---|
|
#18+
Всем привет! У меня есть бин Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Я хочу получить JSON, в котором только 3 поля id, name, favoriteBooks. И желательно не сеттить их руками. Т.е. хочется что-то вроде решения в 2 строки: Код: java 1. 2. Попробывал библиотеку json.org, но она для javabean-ов не умеет выбирать определенные поля. Их можно выбирать только если эти поля буду public. Посоветуйте какую-нибудь библиотеку, которая умеет так обращаться с бинами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2015, 14:34 |
|
||
|
Как конвертировать Java bean в JSON, выбрав только некоторые поля
|
|||
|---|---|---|---|
|
#18+
Паша01, Jackson, Gson ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2015, 14:36 |
|
||
|
Как конвертировать Java bean в JSON, выбрав только некоторые поля
|
|||
|---|---|---|---|
|
#18+
Да, получилось это сделать с помощью библиотеки Jackson Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: java 1. 2. Код: java 1. 2. 3. 4. 5. 6. 7. Но кое-что не могу сделать: у меня поле id повторяется в классе User и Address. Так вот как в массиве строк ignorableFieldNames правильно указать, что я хочу выводить id класса User, но игнорировать id класса Address. Попробовал вот так, но не получается: Код: xml 1. 2. 3. Если указать просто Код: xml 1. то будет игнорировать id во всех классах. Как мне это разрулить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2015, 16:55 |
|
||
|
Как конвертировать Java bean в JSON, выбрав только некоторые поля
|
|||
|---|---|---|---|
|
#18+
Это, мягко выражаясь. Тривиальным образом делается с помощью XStream. Сейчас проверил. Для преобразования в JSON можно найти много чего, необязательно хвататься за первое, что кто-то скажет. Я спрашиваю у google. Библиотека XStream используется для работы с XML (часто ею пользуюсь), но там ещё есть преобразование в JSON. Мне недавно понадобилось преобразовать: XML->Java объект->JSON, что им и сделал. Много изучать не пришлось. В данном случае имеем половину задачи: Java объект->JSON. Вот приблизительно: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Где класс User: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. В нём для примера я создал пустой список favoriteBooks, а favoriteFilms не инициализировал. В результате favoriteFilms вообще не вывелся в JSON, а favoriteBooks вывелся, но пустой. Чтобы отменить его вывод, я добавил аннотацию @XStreamOmitField в поле класса User, а для её обработки добавил в класс Test оператор xstream.processAnnotations(new Class [] {User.class}); После чего favoriteBooks из вывода пропал и получилось: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. Ещё там может быть полезна аннотация @XStreamAlias для преобразования имён полей и классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2015, 21:05 |
|
||
|
Как конвертировать Java bean в JSON, выбрав только некоторые поля
|
|||
|---|---|---|---|
|
#18+
Да, забыл. Надо убрать вывод id из адреса. Для этого в класс Address добавляем аннотацию: Код: java 1. 2. А в классе Test изменяем оператор: Код: java 1. Результат: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2015, 21:14 |
|
||
|
Как конвертировать Java bean в JSON, выбрав только некоторые поля
|
|||
|---|---|---|---|
|
#18+
Partisan M, Спасибо за пример, но он по сути сводится к аналогичной аннотации из других библиотек (json.org, jackson), а именно @JsonIgnore. К тому же, это не тот гибкий способ, который я искал. Представь, что объект класса A возвращается двумя методами: в одном методе надо игнорировать поле id, а в другом нет. Это уже аннотацией @XStreamOmitField не разрулишь, потому что из-за неё в обоих методах будет игнорироваться поле id. Поэтому я применяю разные фильтры к одному и тому же объекту А. И нужные мне ответы я нашел тут . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2015, 11:13 |
|
||
|
Как конвертировать Java bean в JSON, выбрав только некоторые поля
|
|||
|---|---|---|---|
|
#18+
Вообще-то в XStream есть способ и без аннотаций. Вместо них в моём программном примере достаточно записать Код: java 1. То есть, проще, чем делает Джексон. Аннотация @XStreamAlias тоже необязательна, вместо неё можно xstream.alias (...). Таким образом, можно вообще обойтись без модификации классов User и Address. Ещё способ - не зависящий от библиотеки: наследованием приводить класс с лишними полями к разным классам без них. Это я описал для полноты ответа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2015, 12:14 |
|
||
|
Как конвертировать Java bean в JSON, выбрав только некоторые поля
|
|||
|---|---|---|---|
|
#18+
Тут да, согласен, без аннотаций пример хороший. А касаемо деления наследованием тоже можно поспорить. Он хорош тогда, когда у тебя 2-3 варианта комбинаций полей, и из базы удобнее доставать. Но если у тебя комбинаций 5, то гораздо лучше пользоваться разными json-библиотеками и отфильтровывать ненужное. Хотя в последнем варианте встает вопрос, правильно ли все в проекте спроектировано =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2015, 12:30 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38879800&tid=2125804]: |
0ms |
get settings: |
9ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
151ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 427ms |

| 0 / 0 |
