Verwendung von DeferredResult
geschätzt wird, ist nicht nur eine Frage der Antworttyp des Controllers zu ändern. Ein Controller, der eine DeferredResult
zurückgibt, delegiert wahrscheinlich die Behandlung der Anfrage an einen Thread-Pool (oder einen asynchronen Mechanismus), und was auch immer die Anfrage ausführt, muss die Antwort auf DeferredResult
setzen. Etwas wie folgt aus:
In der Steuerung:
DeferredResult deferredResult = new DeferredResult<>();
// pass deferredResult into a runnable task (or something similar)
// which is scheduled for execution via a thread pool (or something similar)
return deferredResult;
In der Aufgabe, die den Antrag im Namen der Steuerung führt:
// do some work
// ...
deferredResult.setResponse(responseBody);
Yup, haben wir einen Rückruf, die den Körper legt. Ich fand, dass wir einen seltsamen Filter hatten, der den Reaktionskörper weiter unten in der Kette abbaute. – Alex