如何从 Spring Data REST 访问 Angular 中 _links 下的实体?
How to acess an entity under _links in Angular from Spring Data REST?
我遇到了一个对我的 Angular 水平来说非常具有挑战性的问题。你能帮忙吗?
在 Spring Data REST 中,实体 Worker
与实体 TempworkEvent
具有 @OneToMany
双向关系,如下所示 _links
。我想通过这种关系访问 TempworkEvent
个对象及其属性。
{
"id" : 3,
"name" : "Nadja Miller",
"profession" : "Experte/in Anästhesiepflege",
"_links" : {
"self" : {
"href" : "http://localhost:8080/api/workers/3"
},
"worker" : {
"href" : "http://localhost:8080/api/workers/3"
},
"tempworks" : {
"href" : "http://localhost:8080/api/workers/3/tempworks"
},
"tempworkEvents" : {
"href" : "http://localhost:8080/api/workers/3/tempworkEvents"
}
}
在Angular中Worker
实体成功:
getWorkers(): Observable<Worker[]> {
return this.httpClient.get<GetResponseWorkers>(this.workersUrl).pipe(
map(response => response._embedded.workers)
);
}
(...)
interface GetResponseWorkers {
_embedded: {
workers: Worker[];
}
}
挑战在于如何通过_links
访问Worker
的tempworkEvents
对象及其属性:
"tempworkEvents" : {
"href" : "http://localhost:8080/api/workers/3/tempworkEvents"
}
let obj = {
"id" : 3,
"name" : "Nadja Miller",
"profession" : "Experte/in Anästhesiepflege",
"_links" : {
"self" : {
"href" : "http://localhost:8080/api/workers/3"
},
"worker" : {
"href" : "http://localhost:8080/api/workers/3"
},
"tempworks" : {
"href" : "http://localhost:8080/api/workers/3/tempworks"
},
"tempworkEvents" : {
"href" : "http://localhost:8080/api/workers/3/tempworkEvents"
}
}
}
console.log('tempworkEvents',obj._links.tempworkEvents);
您可以像上面那样访问对象。
其中之一:
发出额外的网络请求以获取 TempworkEvent
s
没有 TempworkEvent
JPA 存储库,Spring Data Rest 将在 workers
响应中包含 tempworkEvents
数据
或者,使用 Projection,例如:
在 entities/projections/MyWorkerProjection.java
中:
@Projection(name="foo", types={Worker.class})
public interface MyWorkerProjection {
Long getId();
String getName();
String getProfession();
List<TempworkEvent> getTempworkEvents();
}
然后调用http://localhost:8080/api/workers/3?projection=foo
如果您想要“自动”投影,请参阅:
如果要投影其数据及其链接,您可能需要为 TempworkEvent 创建另一个接口
我遇到了一个对我的 Angular 水平来说非常具有挑战性的问题。你能帮忙吗?
在 Spring Data REST 中,实体 Worker
与实体 TempworkEvent
具有 @OneToMany
双向关系,如下所示 _links
。我想通过这种关系访问 TempworkEvent
个对象及其属性。
{
"id" : 3,
"name" : "Nadja Miller",
"profession" : "Experte/in Anästhesiepflege",
"_links" : {
"self" : {
"href" : "http://localhost:8080/api/workers/3"
},
"worker" : {
"href" : "http://localhost:8080/api/workers/3"
},
"tempworks" : {
"href" : "http://localhost:8080/api/workers/3/tempworks"
},
"tempworkEvents" : {
"href" : "http://localhost:8080/api/workers/3/tempworkEvents"
}
}
在Angular中Worker
实体成功:
getWorkers(): Observable<Worker[]> {
return this.httpClient.get<GetResponseWorkers>(this.workersUrl).pipe(
map(response => response._embedded.workers)
);
}
(...)
interface GetResponseWorkers {
_embedded: {
workers: Worker[];
}
}
挑战在于如何通过_links
访问Worker
的tempworkEvents
对象及其属性:
"tempworkEvents" : {
"href" : "http://localhost:8080/api/workers/3/tempworkEvents"
}
let obj = {
"id" : 3,
"name" : "Nadja Miller",
"profession" : "Experte/in Anästhesiepflege",
"_links" : {
"self" : {
"href" : "http://localhost:8080/api/workers/3"
},
"worker" : {
"href" : "http://localhost:8080/api/workers/3"
},
"tempworks" : {
"href" : "http://localhost:8080/api/workers/3/tempworks"
},
"tempworkEvents" : {
"href" : "http://localhost:8080/api/workers/3/tempworkEvents"
}
}
}
console.log('tempworkEvents',obj._links.tempworkEvents);
您可以像上面那样访问对象。
其中之一:
发出额外的网络请求以获取
TempworkEvent
s没有
TempworkEvent
JPA 存储库,Spring Data Rest 将在workers
响应中包含tempworkEvents
数据或者,使用 Projection,例如:
在 entities/projections/MyWorkerProjection.java
中:
@Projection(name="foo", types={Worker.class})
public interface MyWorkerProjection {
Long getId();
String getName();
String getProfession();
List<TempworkEvent> getTempworkEvents();
}
然后调用http://localhost:8080/api/workers/3?projection=foo
如果您想要“自动”投影,请参阅:
如果要投影其数据及其链接,您可能需要为 TempworkEvent 创建另一个接口