【问题标题】:springmvc DeferredResult .. "No converter found for return value of type: class org.springframework.http.ResponseEntity$DefaultBuilder"springmvc DeferredResult ..“未找到类型返回值的转换器:类 org.springframework.http.ResponseEntity$DefaultBuilder”
【发布时间】: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


【解决方案1】:

使用this SO answerthis example 我看到 deferred.setErrorResult 需要 一个例外,所以我现在有:

deferred.setErrorResult(new FooNotFoundException());

地点:

@ResponseStatus(HttpStatus.EXPECTATION_FAILED)
static class FooNotFoundException extends Exception {
}

保留此问题而不是将其删除为 java.lang.IllegalArgumentException 不在链接的 SO 问题中,这很令人困惑。

【讨论】:

    猜你喜欢
    • 2019-11-04
    • 2019-12-18
    • 1970-01-01
    • 2018-11-02
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    相关资源
    最近更新 更多