Spring MVC - Obtener HttpServletResponse cuerpo

Andrea Grimandi:

Puesto que después de 2 días todavía no puedo entender cómo llevar a cabo una impresión de un HttpServletResponsecuerpo HandlerInterceptorAdapter, voy a preguntar otra vez :)

Con HttpServletRequestque puedo hacer fácilmente algo así request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));y tengo el cuerpo lleno pero la forma de hacer lo mismo con HttpServletResponse?

Si hubiera encontrado un montón de pregunta en StackOverflow por eso, pero ninguno de ellos parece funcionar.

Este es el controlador:

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
        throws Exception {
    //how to print here the "response" by using the "response" parameter
    super.afterCompletion(request, response, handler, ex);
}

esta respuesta es exactamente lo mismo y los enlaces a esta pero usar ServletResponsey NO HttpServletResponsey algo con FilterChainlo que no tengo en mi afterCompletionmanejador. Incluso este que parece el más completo no es adecuado (creo) en mi caso.

No alguien me puede dar un ejemplo sencillo con la serialización HttpServletResponse?

Andrea Grimandi:

Ha sido duro en busca profundamente en ella, pero encontró que ResponseBodyAdvicepodría ser adecuado para mis propósitos. Así que buscando un poco de ejemplo en StackOverflow encontrado este chico que tenía bastante mismo problema tener que manipular el Object body.

Esa es mi solución final de trabajo con el fin de poner en práctica lo que he escrito aquí

@ControllerAdvice
public class CSRFHandler implements ResponseBodyAdvice<Object> {

    @Value("${security.csrf.enabled}")
    private String csrfEnabled;

    @Value("${security.csrf.headerName}")
    private String csrfHeaderName;

    @Value("${security.csrf.salt}")
    private String salt;

    @Override
    public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
        return true;
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
            Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,
            ServerHttpResponse response) {

        if (new Boolean(csrfEnabled).booleanValue()) {
            String csrfValue = SecureUtil.buildCsrfValue(salt, StringUtil.toJson(body));
            response.getHeaders().add(csrfHeaderName, csrfValue);
        }

        return body;
    }

}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=209039&siteId=1
Recomendado
Clasificación