Estoy intentando crear un registro de solicitud para mi aplicación web. Estoy utilizando resorte 3. 0.Logging HttpRequest parameters and request body
he implementado una clase que se extiende HandlerInterceptorAdapter
y utilizamos el preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
para interceptar la petición.
En el método Quiero ser capaz de registrar el cuerpo de la petición (mis parámetros son objetos en XML que se escriben directamente en el cuerpo de la petición), y para que yo uso request.getReader();
El problema es - más adelante Obtendré un IllegalStateException
cuando el controlador de primavera intente leer la solicitud.
¿Hay alguna manera de hacer lo que pretendo?
Hay un par de problemas. En ServletRequest solo puede llamar a getReader() o getInputStream() no a ambos. Si llamas a ambos, obtienes una IllegalStateException. Podría intentar llamar a getInputStream, pero aún así puede obtener un error si lee la secuencia de entrada. Es posible que Spring no pueda verla. (ServletInputStream puede ser compatible con el reinicio, pero no lo creo). Su mejor opción es registrar los parámetros durante el proceso de deserialización XML (debe averiguar qué clase hace esto) o inmediatamente después. – Pace
¿ha considerado configurar su servidor http para registrar los encabezados de solicitud o usar filtros de servlet para realizar el registro? – happymeal
@happymeal No solo necesito los encabezados, también necesito el cuerpo. –