Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot REST API过滤器,其中字段的值是基于其他字段动态计算的_Spring Boot_Rest - Fatal编程技术网

Spring boot REST API过滤器,其中字段的值是基于其他字段动态计算的

Spring boot REST API过滤器,其中字段的值是基于其他字段动态计算的,spring-boot,rest,Spring Boot,Rest,我有一个REST服务(Springboot),它为DB中的资源提供基本的CRUD。例如,名为虚拟机的资源 GET虚拟机的响应主体如下所示: { "vmName": "123", "vmDisks": [ { "disk1": {"diskSize": 123}, "disk2": {"diskSize": 234} } ], "totalSize" : 357 } 我想筛选总大小大于

我有一个REST服务(Springboot),它为DB中的资源提供基本的CRUD。例如,名为虚拟机的资源

GET虚拟机的响应主体如下所示:

{
    "vmName": "123",
    "vmDisks": [
        {
            "disk1": {"diskSize": 123},
            "disk2": {"diskSize": 234}
        }
    ],
    "totalSize" : 357
}
我想筛选总大小大于300的虚拟机

/api/virtualmachines?filter=“totalSize lt 300”

但是,字段
totalSize
不会持久存储在DB中(根据REST层中的
diskSize
字段动态计算)。通过将过滤器传输到DB中,可以轻松实现DB中的过滤字段,同时DB可以处理分页

对于这个计算字段-
totalSize
,我不知道如何支持过滤和排序。显然,我无法获取内存中的所有资源,并通过手动分页对这个特殊字段进行筛选和排序


非常感谢您的回复。

由于您不想在内存中进行此类过滤,那么如何计算totalSize字段?可以为每个VM计算totalSize。然而,为了支持筛选和排序,看起来我必须在内存中加载所有VM,这对我来说是不可接受的。首先,REST不是域/DB模型到资源的直接映射!第二,您不是在做REST,而是在做带有专有消息格式、自定义逻辑的普通RPC,可能还有很多Fielding不同意的东西。为什么您需要从“REST层”开始?为什么不直接公开数据库?如果只是通过域或数据库模型,为什么需要更高级别的抽象和复杂性?几乎所有的数据库都有完善的权限管理,并支持选定用户的自定义视图我能想到的一个解决方法是在数据库中应用分页,而不使用totalSize字段,然后应用逻辑填充totalSize字段。然后对totalSize字段应用过滤器,并将过滤结果保存在内存中。然后重复该过程,直到处理完所有DB记录。然后对内存中的筛选列表应用分页并返回。