ho fatto qualche modifica.
adesso il json risulta così:
più corretto, nel senso che almeno risulta un array, ma cmq vuoto.codice:{ "data" : [ { "nome" : "Dance", "canzoni" : [ ] }, { "nome" : "Hardstyle", "canzoni" : [ ] }, { "nome" : "Italiana", "canzoni" : [ ] }, { "nome" : "ND", "canzoni" : [ ] }, { "nome" : "Straniera", "canzoni" : [ ] } ] }
questo il codice:
vi ho messo due for.codice:router.route("/").handler(routingContext -> { HttpServerResponse response = routingContext.response(); getClient() .query("SELECT DISTINCT canzone_genere AS nome FROM canzoni ORDER BY canzone_genere") .execute(ar -> { RowSet<Row> rowSet = ar.result(); List<Genere> list = new ArrayList<>(); for (Row row : rowSet) { List<Canzone> list2 = new ArrayList<>(); JsonObject jsonObject = row.toJson(); Genere genere = new Genere(); genere.setNome(jsonObject.getString("nome")); String query = String.format("SELECT canzone_titolo AS titolo FROM canzoni WHERE canzone_genere = '%s' ORDER BY canzone_titolo", genere.getNome()); getClient() .query(query) .execute(ar2 -> { RowSet<Row> rowSet2 = ar2.result(); for (Row row2 : rowSet2) { JsonObject jsonObject2 = row2.toJson(); Canzone canzone = new Canzone(); canzone.setTitolo(jsonObject2.getString("titolo")); list2.add(canzone); } // OK --> STAMPA LE CANZONI for (Canzone c : list2) { System.out.println(c.getTitolo()); } }); // KO --> NON STAMPA LE CANZONI for (Canzone c : list2) { System.out.println(c.getTitolo()); } genere.setCanzoni(list2); list.add(genere); } JsonObject jsonObject = new JsonObject(); jsonObject.put("data", list); response .putHeader("content-type", "application/json; charset=utf-8") .end(Json.encodePrettily(jsonObject)); }); });
come vedete il secondo non stampa nulla, come si svuotasse appena uscito dall'execute.

Rispondi quotando