2017-07-25 6 views
0

Ich habe gesehen this, aber ich habe dieses Problem jetzt.DeferredResult Leerer Körper

Wenn ich meinen Controller ändern, um eine ResponseEntity<?> zurückzugeben, kommt der Körper gut durch, aber wenn er DeferredResult<ResponseEntity<?>> zurückgibt, dann bekomme ich meine Überschriften und Statuscode, aber keine Antwortstelle.

Jede Hilfe wird stark

Antwort

0

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); 
+0

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