Вам нужно сделать это (на основе предыдущего ответа):
public function getAllCategoryAction() {
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
'SELECT c
FROM AppBundle:Categoria c'
);
$categorias = $query->getArrayResult();
$response = new Response(json_encode($categorias));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
Он отлично работает с любым запросом, который Doctrine возвращает как массив.
Думаю, это должно направить вас в нужную сторону:
import java.beans.*
for (PropertyDescriptor pd : Introspector.getBeanInfo(Foo.class).getPropertyDescriptors()) {
if (pd.getReadMethod() != null && !"class".equals(pd.getName()))
System.out.println(pd.getReadMethod().invoke(foo));
}
Обратите внимание, что вы можете создавать экземпляры BeanInfo или PropertyDescriptor самостоятельно, т.е. без использования Introspector. Однако Introspector делает некоторое внутреннее кэширование, что обычно является хорошей вещью (tm). Если вы счастливы без кэша, то можете даже обойтись
// TODO check for non-existing readMethod
Object value = new PropertyDescriptor("name", Person.class).getReadMethod().invoke(person);
Однако существует множество библиотек, расширяющих и упрощающих API java.beans. Commons BeanUtils - хорошо известный пример. Там вы просто сделаете:
Object value = PropertyUtils.getProperty(person, "name");
BeanUtils поставляется с другими удобными вещами. Например, преобразование значений "на лету" (объект в строку, строка в объект) для упрощения установки свойств из пользовательского ввода.
Соглашение об именовании является частью устоявшейся спецификации JavaBeans и поддерживается классами из пакета java.beans.