2016-07-20 6 views
0

Ich habe eine Datenbank, und ich möchte einen Endpunkt verwenden, um die Daten abzurufen. Aber ich möchte die Daten so filtern, dass nur bestimmte Werte zurückgegeben werden. Ich möchte den Endpunkt aufrufen und dann die gewünschten Daten abrufen. Ich habe zwei Methoden zum Aufruf aller Daten und eine zum Aufruf von nur 1 Datensatz in der Datenbank gemacht. Beide funktionieren gut, aber ich möchte jetzt mehrere Datensätze aus der Datenbank erhalten. Das ist, was ich habe, so weit:Erstellen eines Endpunkts zum Zurückgeben einer Liste von Objekten aus einer Datenbank mit Spring

//This get every record 
@RequestMapping(
     value = API_PREFIX_1_0 + ENDPOINT_coupon + "/getCoupon", 
     method = RequestMethod.GET) 
public Collection<Coupon> couponGetAll() 
{ 
    return couponService.getAll(); 
} 

//this get only one record based on the ID of the table 
@RequestMapping(
     value = API_PREFIX_1_0 + ENDPOINT_coupon + "/{id}", 
     method = RequestMethod.GET) 
public Coupon couponGetById(@PathVariable(value = "id") final long id) { 
    return couponService.getById(id); 
} 

Was ich will ist ein Array tun verwenden oder eine Liste von ID, die Daten von dem Server zu erhalten. Vielen Dank für jede Hilfe bei diesem

+0

Ich verstehe die Frage nicht, tun Sie die Einzelteile von einer Abfrage oder über einen Satz von IDs oder etwas anderes finden wollen? – pDer666

+0

Ja wie eine Reihe von IDs und senden Sie sie, um nur die Artikel mit passender IDs zu erhalten – MNM

+0

Also, was willst du deine URL sein? Es klingt wie etwas, das ein POST sein sollte, mit einer Nutzlast, die die Liste der IDs angibt. – Andreas

Antwort

3

Die Feder CrudRepository bereits ein Verfahren liefert Produkte durch eine Reihe von IDs zu finden:

Iterable<T> findAll(Iterable<ID> ids) 

diese Methode sollte von Ihrem Service ausgelöst werden, wenn Sie eine CrudRepository verwenden in Ihre Persistenzschicht. Dann könnten Sie einen Anfrageparameter zu Ihrer couponGetAll() Methode hinzufügen, wo Sie die IDs erhalten und an Ihren Service senden können.

@RequestMapping(value = API_PREFIX_1_0 + ENDPOINT_coupon + "/listOfCoupons", method = RequestMethod.GET) 
public Iterable<Coupon> couponGetMine(@RequestParam(name="ids")String ids) { 
Iterable<Long> longIds = convertToLong(ids); 
return couponService.getAll(ids); 
} 

Die Client-Seite URL so etwas wie dies aussehen würde zu nennen: aus dem String .../listOfCoupons ids = 2,4,7,3 Im Endpunkt Sie die Zahlen extrahieren?. Vielleicht gibt es eine bessere Lösung, aber das ist es, was ich in dieser kurzen Zeit denke.

umrechnen ID String z.B .:

public Iterable<Long> convertToLong(final String ids){ 
    String[] idArray = ids.split(","); 
    List<Long> idsAsLong = new ArrayList<>(); 
    for (int i = 0; i < idArray.length; i++) { 
     idsAsLong.add(Long.parseLong(idArray[i])); 
    } 
    return idsAsLong; 
} 
+0

Ok, also habe ich meinen gesamten Code umgeschrieben und das iterable hinzugefügt, aber ich weiß nicht, wie ich ihn über den Endpunkt aufrufen soll. – MNM

+0

@RequestMapping ( \t \t value = API_PREFIX_1_0 ENDPOINT_coupon + + "/ listOfCoupons" \t \t method = RequestMethod.GET) public Iterable couponGetMine (Iterable id) { \t return couponService.getAll (id); } – MNM

+1

@MNM hat gerade die Antwort bearbeitet. hoffentlich wird es dir helfen – pDer666

Verwandte Themen