Estoy buscando una manera de autowire HttpServletResponse
. No funciona con la primavera de la caja, pero he encontrado esta descripción. Esto funciona, pero es molesto, en que la primavera, obviamente, tiene un mecanismo para hacer que los objetos ámbito de petición (es decir,HttpServletRequest
) y este parece ser un hack atornillada en la parte superior.
Hay una forma de gancho en el mismo mecanismo que la primavera se utiliza para HttpServletRequest
? Y, alguna idea de por qué el equipo primavera decidió hacer sólo HttpServletRequest
autowire capaz (y excluidos HttpServletResponse
)?
OriginalEl autor Kevin | 2011-08-08
Quizás hay alguna solución, pero no es tan obvio, porque no es la forma en que está destinado a ser. Spring MVC está destinado a tener singleton
@Controller
frijoles que proporcionan@RequestMapping
métodos que tome la solicitud y la respuesta como argumentos.Si necesita la respuesta en otro lugar (la capa de servicio) – no lo hagas. La respuesta no debe ir más allá de la web (controlador) de la capa.
Para inyectar la respuesta, usted necesita:
– para almacenar la respuesta en un
ThreadLocal
– para hacer una fábrica de frijol que devuelve la respuesta actual
Sobre el código de ejemplo que mostró – no estoy seguro de que si usted no va a necesitar la fábrica de frijol para devolver un proxy (en aplicación de la
HttpServletResponse
), que a su vez a devolver la respuesta actual. Y se hace bastante complicado.Pero en última instancia, usted no debe hacer eso. Si usted necesita para interceptar varios controlador de invocaciones, el uso de la mvc-interceptor. Si usted realmente necesita para utilizar un aspecto, usted puede obtener la respuesta si se pasa como argumento al método interceptado.
@Aspect
que está destinado a envolver el@Controller
. El «no a la forma en que está destinado a ser» el argumento no explica por qué HttpServletRequest es autowire capaz y HttpServletResponse no es cualquiera.El uso de interceptores para que. Que ver la respuesta
La petición – no sé por qué lo hicieron inyectable. Voy a buscar una manera de inyectar la respuesta y le permitirá saber ypu
Estás diciendo que spring AOP apoyo es insuficiente para el caso de uso específico de ajuste de los controladores que desea acceder a la respuesta?!
usted dijo que «La respuesta no debe ir más allá de la web», Pero lo que si tengo que modificar la respuesta coockie por mi lógica interna ?
OriginalEl autor Bozho
Se puede simplemente incluir la solicitud en el método de manejar?
Buen punto, actualizado por el bien de él winting la respuesta. Aunque Bozho tiene la mejor respuesta.
OriginalEl autor John Vint