ngrx实体(数据)多个实体删除休息后端包含的错误类型
我目前正在努力删除多个实体,并在NGRX中保存多个实体模式。这是当前的问题:
我的UI EntityCacheservice:
@Injectable({ providedIn: 'root' })
export class PlayerService extends EntityCollectionServiceBase<Player> {
changes: ChangeSetItem[] = [];
constructor(serviceElementsFactory: EntityCollectionServiceElementsFactory,
private entityCacheDispatcher: EntityCacheDispatcher) {
super('Player', serviceElementsFactory);
}
public createPlayerToBatch(players: Player) {
let cs = new ChangeSetItemFactory().add("Player", players);
this.changes.push(cs);
}
public updatePlayerToBatch(players: Player) {
let cs = new ChangeSetItemFactory().update<Player>("Player", {id: players.id, changes: players});
this.changes.push(cs);
}
// TODO: wrong type in backend here ...
public deletePlayerToBatch(players: Player) {
let cs = new ChangeSetItemFactory().delete("Player", players.id.toString());
this.changes.push(cs);
}
public resetChanges() {
this.changes = [];
}
public saveChangesToDatabase() {
console.log("ChangeSetItems: ", this.changes);
if(this.changes.length == 0) {
// no changes
}
// https://blog.angular-university.io/ngrx-entity/
this.entityCacheDispatcher.saveEntities(this.changes, environment.baseURL + 'player/crud/dispatcher')
.pipe(
map(response => response)
);
}
我的休息端点看起来像:
@POST
@Path("player/crud/dispatcher")
public Response multipleCrudDispatcher(ChangeSet<Player> cs) {
ChangeItem<Player>[] items;
items = cs.getChanges();
Arrays.stream(items).forEach(changeItem -> {
// Get alle affected entities from change item
switch (changeItem.getOp()) {
case Add:
System.out.println("ADD");
// Make the update database logic
handelAdd(changeItem.getEntities());
break;
case Delete:
System.out.println("DELETE" );
// Make the update database logic
//handelDelete((String[]) changeItem.getEntities());
break;
case Update:
System.out.println("UPDATE");
// Make the update database logic
handelUpdates(changeItem.getEntities());
break;
case Upsert:
System.out.println("UPSERT");
break;
default:
}
});
return Response.ok(cs).build();
}
端点期望在后端中更改类型“ player”,这是来自前端的相同结构。这也适用于Create,upSert,都很好地更新,因为它们还包含播放器对象列表。但是使用删除它不起作用:-(。删除期望带有字符串或数字的ID列表...这会导致后端错误,因为Java试图创建一个播放器对象。有人知道我如何可以解决这个难看的问题吗?
I am currently struggling with deleting multiple entities and the save multiple entities pattern in NgRx. Here is the current problem:
My UI EntityCacheService:
@Injectable({ providedIn: 'root' })
export class PlayerService extends EntityCollectionServiceBase<Player> {
changes: ChangeSetItem[] = [];
constructor(serviceElementsFactory: EntityCollectionServiceElementsFactory,
private entityCacheDispatcher: EntityCacheDispatcher) {
super('Player', serviceElementsFactory);
}
public createPlayerToBatch(players: Player) {
let cs = new ChangeSetItemFactory().add("Player", players);
this.changes.push(cs);
}
public updatePlayerToBatch(players: Player) {
let cs = new ChangeSetItemFactory().update<Player>("Player", {id: players.id, changes: players});
this.changes.push(cs);
}
// TODO: wrong type in backend here ...
public deletePlayerToBatch(players: Player) {
let cs = new ChangeSetItemFactory().delete("Player", players.id.toString());
this.changes.push(cs);
}
public resetChanges() {
this.changes = [];
}
public saveChangesToDatabase() {
console.log("ChangeSetItems: ", this.changes);
if(this.changes.length == 0) {
// no changes
}
// https://blog.angular-university.io/ngrx-entity/
this.entityCacheDispatcher.saveEntities(this.changes, environment.baseURL + 'player/crud/dispatcher')
.pipe(
map(response => response)
);
}
My Rest Endpoint looks like:
@POST
@Path("player/crud/dispatcher")
public Response multipleCrudDispatcher(ChangeSet<Player> cs) {
ChangeItem<Player>[] items;
items = cs.getChanges();
Arrays.stream(items).forEach(changeItem -> {
// Get alle affected entities from change item
switch (changeItem.getOp()) {
case Add:
System.out.println("ADD");
// Make the update database logic
handelAdd(changeItem.getEntities());
break;
case Delete:
System.out.println("DELETE" );
// Make the update database logic
//handelDelete((String[]) changeItem.getEntities());
break;
case Update:
System.out.println("UPDATE");
// Make the update database logic
handelUpdates(changeItem.getEntities());
break;
case Upsert:
System.out.println("UPSERT");
break;
default:
}
});
return Response.ok(cs).build();
}
The endpoint expects a changeSet of type "Player" in the backend, the same structure that comes from the frontend. This works also with create, upsert, update all very well, because they also contain a list of player objects. But with DELETE it doesn't work :-(. The DELETE expects an ID list with strings or numbers ... which leads to an error in the backend, because Java tries to create a player object. Does anyone have an idea how I can solve this unsightly problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论