Я использую JPA Toplink, JAX-RS, NetBean6.9
До сих пор я успешно конвертировал результат запроса JPQL, представляющий собой List с одним типом объекта, в JSON.После отлично работает, он генерирует JSON к тому времени, когда он попадает в браузер, потому что я указал это в аннотации JPA
Фрагмент JPA
@XmlRootElement //here enable JSON
@Entity
@Table(name = "MasatosanTest")
Класс ресурсафрагмент
@Path("allJoin")
@GET
@Produces("application/json")
public List<MasatosanTest> getAllJoinResult() {
EntityManager em = null;
List<Object[]> mt = null;
try {
em = EmProvider.getDefaultManager();
Query query = em.createQuery("SELECT m1, m2 FROM MasatosanTest m1, MasatosanTest2 m2");
mt = query.getResultList();
}
catch(Exception e) {
System.out.println("MasatosanTestResource.java - getJoinedResult ERROR: " + e);
}
finally {
if(em != null) {
em.close();
}
}
//I'm only adding MasatosanTest object into the List not MasatosanTest2
List<MasatosanTest> list = new ArrayList<MasatosanTest>();
MasatosanTest mt = null;
for(Object[] items : mt) {
mt = (MasatosanTest)items[0];
list.add(mt);
}
return list;
}//end getAllJoinResult()
Приведенный выше код в браузере выведет что-то вроде:
[MasatosanTest : [[name:foo], [name:moo]]
Моя проблема в том, что JPQL возвращает 2 разных типа объектов, это не такбольше автоматически конвертировать в JSON.
Если я немного изменю приведенный выше код и добавлю MasatosanTest2 в список.
//Now I'm adding MasatosanTest2 to the List in addition to MasatosanTest
//So changing List data type to List<Object> to accept both object types.
List<Object> list = new ArrayList<Object>();
MasatosanTest mt = null;
MasatosanTest2 mt2 = null;
for(Object[] items : mt) {
mt = (MasatosanTest)items[0];
mt2 = (MasatosanTest2)items[1];
list.add(mt);
list.add(mt2)
}
return list;
Затем, конечно, измените метод, возвращающий тип и List..
public List<Object> getAllJoinResult() {
Тогда я получаю сообщение об ошибке, которое не может быть JSON: (*
A message body writer for Java type, class java.util.ArrayList,
and MIME media type, application/json, was not found
Разрешено ли иметь JSON, содержащий несколько типов?
Моя цель - иметь JSON вроде:
[[MasatosanTest : [[name:foo], [name:moo]],
[MasatosanTest2 : [[name:boo], [name:www]] ]