質問: httpServletResponse.getOutputStram(); ``` どっちでもダウンロードの結果は変わりないように見えるのですが。 どなたか参考となるサイトでも大丈夫ですので、教えていただけると助かります。
回答: Spring MVC のリファレンスに、ハンドラの戻り値についての説明があります: * 1.3.3. Handler Methods > Return Values 曰く、 > > `ResponseEntity`: > > The return value that specifies the full response (including HTTP headers and body) is to be converted through `HttpMessageConverter` implementations and written to the response. See `ResponseEntity`. > > > `void`: > > A method with a `void` return type (or `null` return value) is considered to have fully handled the response if it also has a `ServletResponse`, an `OutputStream` argument, or an `@ResponseStatus` annotation.(後略) > > > 前者はSpring MVCのサポートを受ける方式、後者はサポートを受けずに素のServlet APIで実現する方式です。 一般的には、楽をするためにフレームワークを使っているので前者の方式を使うのが妥当であるということになるかと思いますが、お仕着せの挙動が自分の作りたいものに反しているので後者を選択する、というようなことも十分あり得るかと考えます。 今回の場合だと、前者を使うことで、ストリームに書いてcloseするといった部分は自前で書く必要が無くなる分楽になっている、と言えるかと思います。