programing

Return a stream with Spring MVC's ResponseEntity

muds 2023. 9. 14. 00:03
반응형

Return a stream with Spring MVC's ResponseEntity

나는 스프링 MVC 방식을 가지고 있습니다.ResponseEntity. 검색된 특정 데이터에 따라 데이터 스트림을 사용자에게 반환해야 하는 경우가 있습니다.스트림이 아닌 다른 것을 반환하거나 리디렉션하는 경우도 있습니다.크기가 클 수 있기 때문에 바이트 배열이 아닌 스트림으로 했으면 합니다.

Currently, I return the stream using the following snippet of code:

HttpHeaders httpHeaders = createHttpHeaders();
IOUtils.copy(inputStream, httpServletResponse.getOutputStream());

return new ResponseEntity(httpHeaders, HttpStatus.OK);

불행히도 이것은 봄을 허락하지 않습니다.HttpHeaders응답에서 HTTP 헤더를 실제로 채울 데이터입니다.내 코드가 다음 코드에 쓰기 때문에 이것은 말이 됩니다.OutputStream봄이 오기 전에ResponseEntity.

어떻게든 반환하면 매우 좋을 것입니다.ResponseEntity의 소리와 함께InputStream스프링이 처리하게 놔둬요또한 성공적으로 반환할 수 있는 제 기능의 다른 경로와 평행하게 됩니다.ResponseEntity. 제가 스프링으로 이 일을 해낼 수 있는 방법이 없을까요?


또한, 저는 그 물건을 돌려주려고 노력했습니다.InputStream에서ResponseEntity봄이 받아들일지 보려고요

return new ResponseEntity(inputStream, httpHeaders, HttpStatus.OK);

But it throws this exception:

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation

나는 모든 것을 설정함으로써 내 기능을 작동시킬 수 있습니다.HttpServletResponse직접적으로 그렇지만 저는 봄으로만 하고 싶습니다.

Spring's InputStreamResource works well. You need to set the Content-Length manually, or it appears that Spring attempts to read the stream to obtain the Content-Length.

InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
httpHeaders.setContentLength(contentLengthOfStream);
return new ResponseEntity(inputStreamResource, httpHeaders, HttpStatus.OK);

I never found any web pages suggesting using this class. I only guessed it because I noticed there were a few suggestions for using ByteArrayResource.

ReferenceURL : https://stackoverflow.com/questions/20333394/return-a-stream-with-spring-mvcs-responseentity

반응형