Используйте FlexJSON, это очень просто. Он позволяет создавать JSONSerializers, которые могут включать/исключать нужные поля.
Отъезд this article для некоторых примеров использования его с Play! Фреймворк.
Вот простой пример:
public ComplexClass {
public Long id;
public String name;
// And lots of other fields you don't want
public String toJsonString() {
// Include id & name, exclude all others.
JSONSerializer ser = new JSONSerializer().include(
"id",
"name",
).exclude("*");
return ser.serialize(this);
}
}
Вы можете добавить их к dependencies.yml так:
require:
- play
- net.sf.flexjson -> flexjson 2.1
То, что я обычно делаю это написать интерфейс для моделей, инвентарем a toJSONString()
, чтобы я мог вызвать renderJSON(someModel.toJSONString())
в контроллере.
Link to official website
EDIT: Дополнительный пример для списков/коллекция
Хорошо, когда вы начинаете сериализации списка вы можете получить неожиданные результаты. Это связано с тем, что оценка имеет значение. Первые include()
или exclude()
имеют приоритет над следующими.
Вот пример сериализации дочерних элементов родительского объекта (отношение OneToMany).
JSONSerializer ser = new JSONSerializer();
// Exclude these standard fields from childs
ser.exclude(
"*.persistent",
"*.class",
"*.entityId"
);
// Include childs and all its other fields
ser.include(
"childs",
"childs.*"
);
// Exclude everything else
ser.exclude("*");
String data = ser.serialize(parent);
*
является шаблонных пути. Эта документация полностью объясняет это:
Исключить *.class
будет соответствовать любой глубине пути. Поэтому, если flexjson сериализует поле с путём «foo.bar.class», *
в *.class
будет соответствовать foo.bar.
Большое спасибо за ваш элегантный ответ. Я дам ему попробовать. FlexJson звучит хорошо, потому что гораздо проще создавать несколько представлений на одни и те же данные. – huzeyfe
Кстати, (если возможно) вы могли бы подробно рассказать о своих деталях интерфейса, чтобы я мог также использовать этот способ для использования в контроллерах, поскольку мне нужно также сериализовать списки объектов. – huzeyfe
Обновлено с примером для списков :) – maartencls