Skip to content

Instantly share code, notes, and snippets.

@shazin
Created January 19, 2016 12:17
Show Gist options
  • Save shazin/193aeb7972ab8a7440b1 to your computer and use it in GitHub Desktop.
Save shazin/193aeb7972ab8a7440b1 to your computer and use it in GitHub Desktop.
public class ObservableReturnValueHandler implements HandlerMethodReturnValueHandler {
public boolean supportsReturnType(MethodParameter returnType) {
Class parameterType = returnType.getParameterType();
return Observable.class.isAssignableFrom(parameterType);
}
public void handleReturnValue(Object returnValue,
MethodParameter returnType, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest) throws Exception {
if(returnValue == null) {
mavContainer.setRequestHandled(true);
return;
}
final DeferredResult<Object> deferredResult = new DeferredResult<Object>();
Observable observable = (Observable) returnValue;
observable.subscribe(result -> deferredResult.setResult(result), errors -> deferredResult.setErrorResult(errors));
WebAsyncUtils.getAsyncManager(webRequest).startDeferredResultProcessing(deferredResult, mavContainer);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment