我最近开始使用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 …Run Code Online (Sandbox Code Playgroud)