使用 Spring 创建一个端点到 return 来自数据库的对象列表

Creating a endpoint to return a list of objects from a database using Spring

我有一个数据库,我想使用端点来获取数据。但我想过滤数据,以便只返回某些值。我想要的是调用端点,然后从中获取我想要的数据。我制作了两种方法,一种用于调用所有数据,另一种用于仅调用数据库中的 1 条记录。他们都工作得很好,但我现在想从数据库中获取多条记录。这是我目前所拥有的:

 //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);
}

我想做的是使用数组或id列表从服务器获取数据。 感谢您对此的任何帮助

spring CrudRepository 已经提供了一种通过一组 id 查找项目的方法:

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

如果您在持久层中使用 CrudRepository,则应由您的服务触发此方法。 然后,您可以将请求参数添加到您的 couponGetAll() 方法,从中获取 ID 并将其发送到您的服务。

@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); 
}

要调用的客户端 url 看起来像这样: .../listOfCoupons?ids=2,4,7,3 在端点中,您从字符串中提取数字。也许有更好的解决方案,但这是我在这么短的时间内想到的。

转换id字符串例如:

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;
}