Hallo liebe Community.
ich hatte bereits ein anderes Problem mit dem Code, daher kann die vollständige Konfiguration hier in der Rubrik Datenbanken eingesehen werden. Das Problem, das ich jetzt habe, scheint mir aber ein ganz basales zu sein, weshalb ich den Gang nach Canossa zu den Java Basics gehe...
Die Background Story: Wir sollen eine Art TravelPortal schreiben.
Ich habe eine Datenbankverbindung mit Mockdaten. Die Repository Methode findAll() gibt mir eine Liste von Hotels aus. Jedes Hotel hat eine Liste von Reviews. Das Objekt avgRating soll dann im Controller die Durchschnittswerte errechnen.
Meine Idee: zwei ForSchleifen:
Alles kommt auch an, die json objekte sehen so aus:
Aaaber, wie man sieht, ist das Objekt AvgRating immer auf "avgAmbience": 1, "avgFriendly": 2, "avgClean": 5, "avgFood": 2, "avgFamily": 2, "avgTotalRating": 2.4 gesetzte (was die Werte der allerletzte Review Liste sind)
Wo liegt der Fehler?
P.S.: Auf Hinweis aus dem anderen Post habe ich auch versucht einen Test zu schreiben...habe allerdings null Erfahrung im Test schreiben (vielleicht kennt jemand eine gute Einführung für die etwas langsameren unter uns wie mich
)...wie dem auch sei, er sieht so aus und schlägt fehl:
Vielen Lieben Dank für jede Hilfe!
ich hatte bereits ein anderes Problem mit dem Code, daher kann die vollständige Konfiguration hier in der Rubrik Datenbanken eingesehen werden. Das Problem, das ich jetzt habe, scheint mir aber ein ganz basales zu sein, weshalb ich den Gang nach Canossa zu den Java Basics gehe...
Die Background Story: Wir sollen eine Art TravelPortal schreiben.
Ich habe eine Datenbankverbindung mit Mockdaten. Die Repository Methode findAll() gibt mir eine Liste von Hotels aus. Jedes Hotel hat eine Liste von Reviews. Das Objekt avgRating soll dann im Controller die Durchschnittswerte errechnen.
Meine Idee: zwei ForSchleifen:
Java:
@RestController
@RequestMapping("/smart-trip/hotels/")
public class HotelController {
@Autowired
HotelRepository hotelRepository;
Hotel hotel;
List <Hotel> hotelList;
List <Review> reviews;
AvgRating avgRating = new AvgRating();
@GetMapping
public List<Hotel> fetchAll(){
hotelList = hotelRepository.findAll();
for (Hotel hotel : hotelList) {
reviews = hotel.getReviewList();
if (!reviews.isEmpty()) {
Double avgAmbience = 0.0;
Double avgClean = 0.0;
Double avgFamily = 0.0;
Double avgFood = 0.0;
Double avgFriendly = 0.0;
Double avgTotalRating = 0.0;
for (Review review : reviews) {
System.out.println(reviews);
avgAmbience += review.getAmbience();
avgClean += review.getCleanness();
avgFamily += review.getFamilyFriendly();
avgFood += review.getFoodQuality();
avgFriendly += review.getFriendliness();
avgTotalRating += review.getAverageRating();
}
avgRating.setAvgAmbience(avgAmbience / reviews.size());
avgRating.setAvgClean(avgClean / reviews.size());
avgRating.setAvgFood(avgFood / reviews.size());
avgRating.setAvgFamily(avgFamily / reviews.size());
avgRating.setAvgFriendly(avgFriendly / reviews.size());
avgRating.setAvgTotalRating(avgTotalRating / reviews.size());
} //Guard Ende
hotel.setAvgRatingStats(avgRating);
}
return hotelList;
}
Alles kommt auch an, die json objekte sehen so aus:
JSON:
[ { "id": 3, "name": "Hotel am Main", "address": "Olof-Staße 19", "telephone": "017630222", "city": "Frankfurt", "description": "Gemütliche Hotel am Main", "website": "www.hotelmain.com", "rating": 4, "reviewList": [ { "id": 3, "averageRating": 2.6, "cleanness": 3, "friendliness": 4, "foodQuality": 1, "ambience": 1, "familyFriendly": 4, "comment": "Tolles Ding", "author": "Janette" }, { "id": 6, "averageRating": 2.8, "cleanness": 4, "friendliness": 5, "foodQuality": 2, "ambience": 2, "familyFriendly": 1, "comment": "Tolles Ding", "author": "Mareike E." } ], "price": 20, "stars": 4, "rooms": 90, "swimmingPool": true, "restaurant": false, "breakfast": "FALSE", "wifi": true, "parking": "true", "email": "hotelmain@mail.de", "avgRatingStats": { "id": null, "avgAmbience": 1, "avgFriendly": 2, "avgClean": 5, "avgFood": 2, "avgFamily": 2, "avgTotalRating": 2.4 } }, { "id": 4, "name": "Wald Hotel", "address": "Waldstr.13", "telephone": "017645665", "city": "Frankfurt", "description": "Günstiges Hotel am Wald", "website": "www.hotelWald.com", "rating": 3, "reviewList": [ { "id": 4, "averageRating": 2.4, "cleanness": 5, "friendliness": 2, "foodQuality": 2, "ambience": 1, "familyFriendly": 2, "comment": "Tolles Ding", "author": "biba-mausi" } ], "price": 30, "stars": 2, "rooms": 40, "swimmingPool": true, "restaurant": false, "breakfast": "TRUE", "wifi": true, "parking": "false", "email": "waldhotel@mail.de", "avgRatingStats": { "id": null, "avgAmbience": 1, "avgFriendly": 2, "avgClean": 5, "avgFood": 2, "avgFamily": 2, "avgTotalRating": 2.4 } }, { "id": 5, "name": "Hotel Blankenese", "address": "Hauptstraße 19", "telephone": "017630222", "city": "Hamburg", "description": "Gemütliches Hotel an der Elbe", "website": "www.hotelblankenese.com", "rating": 3, "reviewList": [], "price": 40, "stars": 3, "rooms": 90, "swimmingPool": false, "restaurant": false, "breakfast": "FALSE", "wifi": true, "parking": "false", "email": "hotelmain@mail.de", "avgRatingStats": { "id": null, "avgAmbience": 1, "avgFriendly": 2, "avgClean": 5, "avgFood": 2, "avgFamily": 2, "avgTotalRating": 2.4 } }, { "id": 6, "name": "Kreuzberg Inn", "address": "Wiesenstr.13", "telephone": "017645665", "city": "Berlin", "description": "Hotel im Szeneviertel", "website": "www.Kreuzberginn.com", "rating": 4.5, "reviewList": [], "price": 60, "stars": 5, "rooms": 40, "swimmingPool": true, "restaurant": false, "breakfast": "TRUE", "wifi": true, "parking": "false", "email": "waldhotel@mail.de", "avgRatingStats": { "id": null, "avgAmbience": 1, "avgFriendly": 2, "avgClean": 5, "avgFood": 2, "avgFamily": 2, "avgTotalRating": 2.4 } }, { "id": 7, "name": "Schlosshotel Dresden", "address": "Hauptstaße 19", "telephone": "017630222", "city": "Dresden", "description": "Gemütliche Hotel an der Elbe", "website": "www.hotelmain.com", "rating": 3.4, "reviewList": [], "price": 70, "stars": 5, "rooms": 90, "swimmingPool": false, "restaurant": false, "breakfast": "FALSE", "wifi": true, "parking": "false", "email": "schlosshotel@mail.de", "avgRatingStats": { "id": null, "avgAmbience": 1, "avgFriendly": 2, "avgClean": 5, "avgFood": 2, "avgFamily": 2, "avgTotalRating": 2.4 } }, { "id": 8, "name": "Berghotel Frankfurt", "address": "Waldstr.13", "telephone": "017645665", "city": "Frankfurt", "description": "Günstiges Hotel am Wald", "website": "www.hotelWald.com", "rating": 2.7, "reviewList": [], "price": 40, "stars": 3, "rooms": 40, "swimmingPool": false, "restaurant": true, "breakfast": "FALSE", "wifi": false, "parking": "true", "email": "waldhotel@mail.de", "avgRatingStats": { "id": null, "avgAmbience": 1, "avgFriendly": 2, "avgClean": 5, "avgFood": 2, "avgFamily": 2, "avgTotalRating": 2.4 } }, { "id": 9, "name": "Gala Hotel", "address": "Hauptstraße 19", "telephone": "017630222", "city": "Frankfurt", "description": "Hochklassiges Domizil der Elbe", "website": "www.hotel-am-berg.com", "rating": 3, "reviewList": [], "price": 100, "stars": 5, "rooms": 90, "swimmingPool": false, "restaurant": false, "breakfast": "TRUE", "wifi": true, "parking": "false", "email": "hotelmain@mail.de", "avgRatingStats": { "id": null, "avgAmbience": 1, "avgFriendly": 2, "avgClean": 5, "avgFood": 2, "avgFamily": 2, "avgTotalRating": 2.4 } }, { "id": 10, "name": "Stadthotel Frankfurt", "address": "Wiesenstr.13", "telephone": "017645665", "city": "Frankfurt", "description": "Hotel im Szeneviertel", "website": "www.stadthotel.com", "rating": 4.5, "reviewList": [], "price": 60, "stars": 5, "rooms": 40, "swimmingPool": true, "restaurant": true, "breakfast": "TRUE", "wifi": true, "parking": "true", "email": "waldhotel@mail.de", "avgRatingStats": { "id": null, "avgAmbience": 1, "avgFriendly": 2, "avgClean": 5, "avgFood": 2, "avgFamily": 2, "avgTotalRating": 2.4 } } ]
Aaaber, wie man sieht, ist das Objekt AvgRating immer auf "avgAmbience": 1, "avgFriendly": 2, "avgClean": 5, "avgFood": 2, "avgFamily": 2, "avgTotalRating": 2.4 gesetzte (was die Werte der allerletzte Review Liste sind)
Wo liegt der Fehler?
P.S.: Auf Hinweis aus dem anderen Post habe ich auch versucht einen Test zu schreiben...habe allerdings null Erfahrung im Test schreiben (vielleicht kennt jemand eine gute Einführung für die etwas langsameren unter uns wie mich
Java:
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import static org.junit.Assert.*;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.itf.Entity.Hotel.Hotel;
public class JSONObjectTest {
@Test
public void givenBidirectionRelation_whenSerializingAsJSON_objectsNotEqual()
throws JsonProcessingException, IOException {
List<Hotel> hotelList = new ArrayList<Hotel>();
Hotel firstHotel = hotelList.get(0);
Double avgClean = firstHotel.getAvgRatingStats().getAvgClean();
String result = new ObjectMapper().writeValueAsString(avgClean);
assertEquals("3.5", result );
}
}
Vielen Lieben Dank für jede Hilfe!