JHipster:使用条件过滤实体-预期的Angular客户端方法

Imp*_*one 6 jhipster angular

我最近开始使用JHipster-感谢这个出色的项目的维护者!

在当前版本的JHipster(撰写本文时为4.10.2)中,实体可以通过实体子生成器或通过包含filter EntityName和添加service EntityName with serviceClass到项目的JDL文件来启用过滤。这将产生一个Spring项目,其中类中的getAllEntities()方法EntityNameResource采用Criteria从URL参数构造的GET参数。

这与为端点生成的Swagger用户界面开箱即用,并且该用户界面发出的查询表明,后端希望每个条件采用GET参数键值对的形式。这与4.10.2过滤文档一致。

但是,我想知道是否有一种想要的方法来使用我错过的前端Angular项目中的方法,而不是自己进行适当的修改以构造一致的URL。

前端服务使用静态函数createRequestOption(req)(从导出app/shared/model/request-util.ts)填充GET用于分页和排序的参数。该函数还期望传入的req对象可以具有query属性;最初,我认为填充此参数是使用后端过滤的预期方式。

但是,createRequestOption(req)当前的实现将的值req.query放在GET称为的参数中query;即,这不会产生后端期望的查询格式,后者要求GET每个条件使用单独的参数。

我使用的解决方案是修改createRequestOption(req)以获取键值对对象数组,而不是req.query(我称它为req.criteria),并将它们添加到URLSearchParams的数组中(它必须是数组,而不是地图,因为可能有多个具有相同键的参数,例如name.in=Megatron&name.in=Optimus)。

所以我改变了:

params.set('query', req.query);
Run Code Online (Sandbox Code Playgroud)

至:

if (req.criteria && req.criteria.length > 0) {
    req.criteria.forEach((criterion) => {
        params.append(criterion.key, criterion.value);
    });
}
Run Code Online (Sandbox Code Playgroud)

...具有如下组成部分的数组填充的组件代码:

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
});
Run Code Online (Sandbox Code Playgroud)

我刚刚创建的一些表单字段筛选测试单一实体单片应用实践中,这种工作的一个实例(目前仅相当于查询)这种方法在GitLab 这里。

因此,我的问题是:

  • 我是否错过了使用当前JHipster版本执行此操作的预期方式?
  • req.query当前实施中的的预期用途是request-utils.ts什么?
  • 在即将发布的版本中,该领域是否会发生变化?例如,是否可以按照启用ElasticSearch的应用程序的方式(但针对每个实体属性)自动生成前端搜索字段?

非常感谢。

小智 6

我在项目中也做过非常相似的事情,在我的解决方案中,标准的用法如下:

let criteria = {
   'name.equals' : 'Optimus',
   'power.equals' : '10'
};
Run Code Online (Sandbox Code Playgroud)

目前,我在“自动完成”字段上工作,该字段将使用条件,并具有对request-util.ts的必要扩展。此处:https : //github.com/jhipster/generator-jhipster/pull/6618

是的,我认为,“查询”方法的参数有点令人困惑,需要对其进行一些简化。

也许我们可以生成“ EntityCriteria.java”的客户端版本,如“ entity-criteria.ts”,但我不确定。我不断了解新功能和更少的代码。