如何将ResponseEntity写入HttpServletResponse(因为它使@ResponseBody)?
例如,我有身份验证成功处理程序:
@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);
}
Run Code Online (Sandbox Code Playgroud)
如果使用MappingJackson2HttpMessageConverter我有错误:"无法写入内容:不在非阻塞模式下."
码:
HttpOutputMessage outputMessage = new ServletServerHttpResponse(response);
messageConverter.write(responseEntity, null, outputMessage);
Run Code Online (Sandbox Code Playgroud)
使用HttpServletResponse实现处理程序的最佳实践是什么?
您可以使用自定义响应对象,使用Jackson ObjectMapper将其转换为JSON字符串,并将结果写入请求:
MyResponseObject.java
private String user;
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
Run Code Online (Sandbox Code Playgroud)
MyAuthenticationSuccessHandler.java
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
MyResponseObject responseObj = new MyResponseObject();
responseObj.setUser("my_user_name");
httpServletResponse.setStatus(HttpStatus.OK.value());
String json = new ObjectMapper().writeValueAsString(responseObj);
httpServletResponse.getWriter().write(json);
httpServletResponse.flushBuffer();
}
Run Code Online (Sandbox Code Playgroud)
基于andrearro88 的回答,我制作了这个通用函数来将 a 复制ResponseEntity到 a 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());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6965 次 |
| 最近记录: |