package org.apereo.cas.util; import com.google.common.base.Throwables; import org.springframework.http.MediaType; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.server.ServletServerHttpResponse; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.HashMap; import java.util.Map; /** * @author Misagh Moayyed * @since 4.1 */ public final class JsonUtils { /** Private constructor. */ private JsonUtils() {} /** * Render model and view. * * @param model the model * @param response the response */ public static void render(final Object model, final HttpServletResponse response) { try { final MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); jsonConverter.setPrettyPrint(true); final MediaType jsonMimeType = MediaType.APPLICATION_JSON; jsonConverter.write(model, jsonMimeType, new ServletServerHttpResponse(response)); } catch (final Exception e) { throw Throwables.propagate(e); } } /** * Render model and view. Sets the response status to OK. * * @param response the response */ public static void render(final HttpServletResponse response) { try { final Map<String, Object> map = new HashMap<>(); response.setStatus(HttpServletResponse.SC_OK); render(map, response); } catch (final Exception e) { throw Throwables.propagate(e); } } /** * Render exceptions. Adds error messages and the stack trace to the json model * and sets the response status accordingly to note bad requests. * * @param ex the ex * @param response the response */ public static void renderException(final Exception ex, final HttpServletResponse response) { final Map<String, String> map = new HashMap<>(); map.put("error", ex.getMessage()); map.put("stacktrace", Arrays.deepToString(ex.getStackTrace())); renderException(map, response); } /** * Render exceptions. Sets the response status accordingly to note bad requests. * * @param model the model * @param response the response */ private static void renderException(final Map model, final HttpServletResponse response) { response.setStatus(HttpServletResponse.SC_BAD_REQUEST); model.put("status", HttpServletResponse.SC_BAD_REQUEST); render(model, response); } }