Я могу использовать GsonBuilder и добавить ExclusionStrategy для имени поля типа firstName или country но, похоже, мне не удается исключить свойства определенных полей типа country.name.
Используя метод public boolean shouldSkipField(FieldAttributes fa), FieldAttributes не содержит достаточно информации, чтобы сопоставить поле с фильтром типа country.name.
P.S: Я хочу избежать аннотаций, так как хочу улучшить это и использовать регулярное выражение для фильтрации полей.
Редактировать: я пытаюсь понять, возможно ли эмулировать поведение плагина Struts2 JSON
Редактировать: Я повторно открыл вопрос со следующим дополнением:
Я добавил второе поле того же типа, чтобы в дальнейшем прояснить эту проблему. В принципе, я хочу исключить country.name но не countrOfBirth.name. Я также не хочу исключать Country как тип. Итак, типы одинаковы, это фактическое место в графе объектов, которое я хочу точно определить и исключить.
Переведено автоматически
Ответ 1
Для любых полей, которые вы не хотите сериализовывать, в общем случае вам следует использовать модификатор "transient" , и это также относится к сериализаторам json (по крайней мере, к нескольким, которые я использовал, включая gson).
Если вы не хотите, чтобы name отображалось в сериализованном json, дайте ему ключевое слово transient, например:
Прочитав все доступные ответы, я обнаружил, что наиболее гибким, в моем случае, было использование пользовательских @Exclude аннотаций. Итак, я реализовал простую стратегию для этого (я не хотел отмечать все поля с помощью @Expose и не хотел использовать transient, что противоречило сериализации в приложении Serializable) :