我最近开始使用JHipster - 感谢这个梦幻项目的维护者!
在当前版本的JHipster(编写本文时为4.10.2)中,实体可以通过实体子生成器启用过滤,或者通过将filter EntityName
和service EntityName with serviceClass
包含到项目的JDL中文件。这将生成一个Spring项目,其中getAllEntities()
类中的EntityNameResource
方法采用从Criteria
参数构造的GET
参数。
这与为端点生成的Swagger UI开箱即用,此UI发出的查询表明后端希望每个条件都采用GET
参数键的形式 - 值对;这与the 4.10.2 Filtering docs一致。
然而,我想知道是否有一种预期的方法可以从我错过的前端Angular项目中使用它,除了自己进行适当的修改以构建一致的URL。
前端服务使用静态函数createRequestOption(req)
(从app/shared/model/request-util.ts
导出)来填充GET
参数以进行分页和排序。此函数还期望传入的req
对象可能具有query
属性;最初,我认为填充此参数是使用后端过滤的预期方式。
但是,createRequestOption(req)
的实施目前将req.query
的值放入名为GET
的{{1}}参数中;即,这不会产生后端预期的查询格式,后者需要为每个标准单独的query
参数。
我使用的解决方案是修改GET
以期望一组键值对象而不是createRequestOption(req)
(我称之为req.query
),并添加这些到req.criteria
的数组(它必须是数组,而不是地图,因为可能有多个具有相同键的参数,例如URLSearchParams
)。
所以我改变了:
name.in=Megatron&name.in=Optimus
为:
params.set('query', req.query);
...使用组件代码按以下行填充数组:
if (req.criteria && req.criteria.length > 0) {
req.criteria.forEach((criterion) => {
params.append(criterion.key, criterion.value);
});
}
我刚刚创建了一个实际工作的示例,其中一些表单字段使用GitLab here中的此方法过滤测试单实体单片应用(目前仅等于查询)。
所以,我的问题是:
let criteria = [
{key: 'name.equals', value: 'Optimus'},
{key: 'power.equals', value: '10'}
];
this.entityService.query({
page: this.page - 1,
size: this.itemsPerPage,
sort: this.sort(),
criteria
});
当前实施中req.query
的用途是什么?非常感谢。
答案 0 :(得分:5)
我在我的项目中也做了非常相似的事情,在我的解决方案中,标准使用如下:
let criteria = {
'name.equals' : 'Optimus',
'power.equals' : '10'
};
目前,我正致力于“自动完成”工作。字段,将使用标准,并具有request-util.ts的必要扩展。这里: https://github.com/jhipster/generator-jhipster/pull/6618
是的,我认为,那个'查询的参数'方法有点混乱,需要简化一点。
也许,我们可以生成' EntityCriteria.java的客户端版本' entity-criteria.ts',但我不确定。不断推动新功能,减少代码,我能理解。