Spring MVC-获取HttpServletResponse正文
由于两天后,我仍然无法弄清楚如何打印HttpServletResponse
人体HandlerInterceptorAdapter
,因此我将再询问一次:)
有了HttpServletRequest
我,我可以轻松地做类似的事情,request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
并且我拥有完整的身体,但是如何做到这一点HttpServletResponse
呢?
我在StackOverflow上发现了很多与此有关的问题,但似乎都没有问题。
这是处理程序:
@Overridepublic 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);
}
这个答案是完全相同的,并链接到此但它们使用ServletResponse
和而不是HttpServletResponse
和FilterChain
我在afterCompletion
处理程序中没有的东西。就我而言,即使这似乎是最完整的,也不适合。
有人可以为我提供一个简单的序列化示例HttpServletResponse
吗?
回答:
很难深入研究它,但发现它ResponseBodyAdvice
可能适合我的目的。因此,在StackOverflow上查找一些示例时,发现这个家伙不得不操作Object body
。
responses?noredirect=1#comment91188511_52118594)
@ControllerAdvicepublic 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;
}
}
以上是 Spring MVC-获取HttpServletResponse正文 的全部内容, 来源链接: utcz.com/qa/419305.html