【发布时间】:2016-04-29 06:16:57
【问题描述】:
这没问题:
@RequestMapping(value = "/foos/{id}", method = RequestMethod.GET)
public ResponseEntity<Foo> _findOne(@PathVariable("id") Integer id) {
Foo foo = findOne(id);
if (foo == null) {
return new ResponseEntity<Foo>(HttpStatus.NOT_FOUND);
}
return new ResponseEntity<Foo>(foo, HttpStatus.OK);
}
由于没有项目,尝试错误时异步版本失败)
服务器异常是:
java.lang.IllegalArgumentException: No converter found for return value of type: class org.springframework.http.ResponseEntity$DefaultBuilder
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:178) ~[spring-webmvc-4.2.3.RELEASE.jar!/:4.2.3.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:153) ~[spring-webmvc-4.2.3.RELEASE.jar!/:4.2.3.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:165) ~[spring-webmvc-4.2.3.RELEASE.jar!/:4.2.3.RELEASE]
这里是 DeferredResult 版本
@RequestMapping(value = "/foos/{id}", method = RequestMethod.GET)
public DeferredResult<ResponseEntity<Foo>> _findOne(@PathVariable("id") Integer id) {
final DeferredResult<ResponseEntity<Foo>> deferred = new DeferredResult<>();
findOne(id).singleOrDefault(null).timeout(1, TimeUnit.SECONDS)
.subscribe(item -> {
if (item == null) {
deferred.setErrorResult(ResponseEntity.status(HttpStatus.NOT_FOUND));
} else {
deferred.setResult(ResponseEntity.ok(item));
}
}, t -> {
deferred.setErrorResult(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR));
}
);
return deferred;
}
我已阅读Spring Boot Application: No converter found for return value of type,但我认为我的情况有所不同,因为只有当我返回 NOT_FOUND 时才会发生这种情况
【问题讨论】:
-
你在 spring config 中定义了什么
& 你在 pom.xml 中是否需要 jackson 依赖项? -
我知道我链接到的那个问题提到了
但我没有。奇怪的是,非延迟版本我不需要它。而且我什至(目前)没有 mvc-dispatcher-servlet.xml !
标签: rest spring-mvc