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?