I recently made an HttpInterceptor
in order to resolve cyclical references in some JSON on the client side, essentially replacing any object with a $ref
property with the object in the JSON that has a matching $id
property. (This is the output you get if Json.Net is configured with PreserveReferencesHandling.Objects
and ReferenceLoopHandling.Ignore
).
The answers here helped me some of way, but none of them show how to modify the body of the response, like the OP needs. In order to do so, one needs to clone the event and update the body, like so:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).map(event => {
if (event instanceof HttpResponse && shouldBeIntercepted(event)) {
event = event.clone({ body: resolveReferences(event.body) })
}
return event;
});
}
Any event that should not be modified is simply passed through to the next handler.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…