Java SpringREST控制器中的FileSystemResource作为ResponseBody提供ClassCastException

Java SpringREST控制器中的FileSystemResource作为ResponseBody提供ClassCastException,java,rest,spring-mvc,Java,Rest,Spring Mvc,我定义了一个控制器,该控制器提供如下本地内容: @RequestMapping(value = PATH_CONTENT, method = RequestMethod.GET) @ResponseBody public ResponseEntity<FileSystemResource> getContent( @PathVariable(URI_PATH_PARAM_CONTAINER_UID) String containerUid, @PathVariable

我定义了一个控制器,该控制器提供如下本地内容:

@RequestMapping(value = PATH_CONTENT, method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<FileSystemResource> getContent(
    @PathVariable(URI_PATH_PARAM_CONTAINER_UID) String containerUid,
    @PathVariable(URI_PATH_PARAM_DOC_UID) String docUid) {
    ...
}
在客户端: 我正在将ResourceHttpMessageConverter添加到RestTemplate messageConverters。 当我最后打以下电话时:

ResponseEntity<FileSystemResource> response = getMyRestClient()
        .getContent(url, null, FileSystemResource.class);
FileSystemResourcecontent = response.getBody();
这会产生一个ClassCastException,表示它不能由TearArrayResource强制转换到FileSystemResource


我可以对代码进行一些修改,以返回一个资源而不是FileSystemResource,这样一切都会正常工作。但我真的很想知道为什么会有这种例外?我也不想采用直接写入HttpServletResponse的方式,因为我想使用Spring的HttpMessageConverter框架。

UrlResource也有同样的例外。这是Spring的ResourceHttpMessageConverter代码中的一个bug吗受保护的资源readInternalClassIt似乎存在多个问题,这会阻止用户从服务返回任何具体的资源类型作为响应,因为当Spring将资源转换为具体的ByteArrayResource时,在接收时存在ClassCastException。为了避免这种情况,我将其作为资源接收,但这是一个不好的限制。其次,该方法将整个响应转换为字节数组,这会导致OOME出现大响应,例如大二进制内容。