[英]How to write ResponseEntity to HttpServletResponse?
How to write ResponseEntity to HttpServletResponse (as it makes @ResponseBody)?如何将 ResponseEntity 写入 HttpServletResponse(因为它使 @ResponseBody)?
For example I have authentication success handler:例如,我有身份验证成功处理程序:
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
Map responseMap = new HashMap();
responseMap.put("user", "my_user_name");
ResponseEntity responseEntity = new ResponseEntity(response, HttpStatus.OK);
}
If use MappingJackson2HttpMessageConverter I have error: "Could not write content: not in non blocking mode."如果使用 MappingJackson2HttpMessageConverter 我有错误:“无法写入内容:不在非阻塞模式下。”
Code:代码:
HttpOutputMessage outputMessage = new ServletServerHttpResponse(response);
messageConverter.write(responseEntity, null, outputMessage);
What are the best practices of implementation handlers with HttpServletResponse?使用 HttpServletResponse 实现处理程序的最佳实践是什么?
You can use a custom response object, convert it to a JSON string using the Jackson's ObjectMapper
and write the result into the request.您可以使用自定义响应对象,使用 Jackson 的
ObjectMapper
将其转换为 JSON 字符串并将结果写入请求。
MyResponseObject.java MyResponseObject.java
private String user;
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
MyAuthenticationSuccessHandler.java MyAuthenticationSuccessHandler.java
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
MyResponseObject responseObj = new MyResponseObject();
responseObj.setUser("my_user_name");
String json = new ObjectMapper().writeValueAsString(responseObj);
httpServletResponse.setStatus(HttpStatus.OK.value());
httpServletResponse.getWriter().write(json);
httpServletResponse.flushBuffer();
}
Based on andrearro88's answer , I have made this generic function to copy a ResponseEntity
to a HttpServletResponse
:基于andrearro88 的回答,我制作了这个通用函数来将
ResponseEntity
复制到HttpServletResponse
:
public static void populateResponse(ResponseEntity<String> responseEntity, HttpServletResponse servletResponse)
throws IOException {
for (Map.Entry<String, List<String>> header : responseEntity.getHeaders().entrySet()) {
String chave = header.getKey();
for (String valor : header.getValue()) {
servletResponse.addHeader(chave, valor);
}
}
servletResponse.setStatus(responseEntity.getStatusCodeValue());
servletResponse.getWriter().write(responseEntity.getBody());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.