Closed
Description
S. Paetzold opened SPR-14423 and commented
In Spring 4.1.1.RELEASE following code used to work:
@ResponseBody
@RequestMapping(value = "", method = PUT)
public CommandResult put(@Valid @RequestBody Record record) {
...
CommandResult result = sendCommand(...);
return result;
}
private class CommandResult
extends DeferredResult<Object>
implements CommandCallback<Object> {
@Override
public void onSuccess(Object result) {
setResult(result);
}
@Override
public void onFailure(Throwable cause) {
setErrorResult(cause);
}
}
Following exception is thrown:
java.lang.IllegalArgumentException: Expected one of Callable, DeferredResult, or ListenableFuture: class com.ysura.rest.controller.ActivityController$CommandResult
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod$ConcurrentResultMethodParameter.getParameterType(ServletInvocableHandlerMethod.java:273) ~[spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ModelAndViewMethodReturnValueHandler.supportsReturnType(ModelAndViewMethodReturnValueHandler.java:72) ~[spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.selectHandler(HandlerMethodReturnValueHandlerComposite.java:90) ~[spring-web-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:77) ~[spring-web-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:126) ~[spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832) ~[spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743) ~[spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) ~[spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895) ~[spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967) [spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:880) [spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) [jetty-runner-9.3.6.v20151106.jar:9.3.6.v20151106]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843) [spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jetty-runner-9.3.6.v20151106.jar:9.3.6.v20151106]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:821) [jetty-runner-9.3.6.v20151106.jar:9.3.6.v20151106]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1685) [jetty-runner-9.3.6.v20151106.jar:9.3.6.v20151106]
...
If the method return type is simply changed to DeferredResult<Object>
it starts working again!
Affects: 4.2.6
Issue Links:
- HTTP Streaming and Server-Sent Events (SSE) [SPR-12212] #16826 HTTP Streaming and Server-Sent Events (SSE)
Referenced from: commits 4ddd957, cfc560c
Backported to: 4.2.7