2010-12-10 20 views
6

En Section 15.3.2.3 Supported handler method arguments and return types de la documentación de Spring 3.0, dice que se puede especificar un java.io.OutputStream o java.io.Writer como un parámetro de un método anotado con @RequestMapping "para generar el contenido de la respuesta. OutputStream/Writer como expuesto por la API de Servlet ". ¿Es la responsabilidad del método cerrar el escritor antes de que finalice o debería permanecer abierto y algún otro proceso de primavera lo cerrará?¿Debo cerrar el parámetro Writer para mi controlador Spring 3?

+0

Desde estas corrientes se obtienen de la API de servlets, consulte http://stackoverflow.com/questions/1159168/should-one-call-close-on-httpservletresponse-getoutputstream-getwriter – axtavt

+0

posible duplicado de [¿Debo cerrar la servlet outputstream?] (http://stackoverflow.com/questions/1829784/should-i-close-the-servlet-outsputstream) – BalusC

Respuesta

3

Debería dejarlo solo. Como regla general, si su código no lo abrió, tampoco debería cerrarlo.

En este caso, el contenedor de servlets (no Spring) es responsable de enjuagar y cerrar todas las transmisiones.

Usted podría hágalo usted mismo, dudo que haría ningún daño, pero no hay necesidad de hacerlo.

+0

Ok, no debería cerrar el flujo provisto por la primavera, pero ¿y si uso un tubo? , es decir, CSVWriter writer = new CSVWriter (springWriter); writer.writeLine ("blabla"); Si no cierro el escritor (o al menos no lo lavo), puedo perder cualquier trabajo, ya que se realiza en algún tipo de memoria intermedia. –

1

skaffman es correcto, no tiene que cerrarlo, y de hecho probablemente no debería, pero sigue siendo una buena idea descargarlo, especialmente en una cláusula 'finally' si se trata de código eso arroja excepciones, es decir, exporta desde una base de datos.

Cuestiones relacionadas