How to write ResponseEntity to HttpServletResponse?

java, spring

Solution

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.

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();
}  

Problem

How to write ResponseEntity to HttpServletResponse (as it makes @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." Code: ``` HttpOutputMessage outputMessage = new ServletServerHttpResponse(response); messageConverter.write(responseEntity, null, outputMessage); ``` What are the best practices of implementation handlers with HttpServletResponse?

Original source