如何将ResponseEntity写入HttpServletResponse?

2024-01-27

如何将 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);
}

如果使用 MappingJackson2HttpMessageConverter 我有错误:“无法写入内容:不在非阻塞模式下。”

Code:

HttpOutputMessage outputMessage = new ServletServerHttpResponse(response);
messageConverter.write(responseEntity, null, outputMessage);

使用 HttpServletResponse 实现处理程序的最佳实践是什么?


您可以使用自定义响应对象,使用 Jackson 将其转换为 JSON 字符串ObjectMapper https://fasterxml.github.io/jackson-databind/javadoc/2.13/com/fasterxml/jackson/databind/ObjectMapper.html并将结果写入请求中。


Example

MyResponseObject.java

private String user;

public String getUser() {
    return user;
}

public void setUser(String user) {
    this.user = user;
}

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();
}  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将ResponseEntity写入HttpServletResponse? 的相关文章

随机推荐