삽질메모장

spring boot SimpleMappingExceptionResolver(ajax/api/default 페이지 설정) 본문

FrameWork/spring

spring boot SimpleMappingExceptionResolver(ajax/api/default 페이지 설정)

shovel 2022. 11. 23. 19:19

 
 

    @Bean
    public CommExceptionAjaxResolver createSimpleMappingExceptionResolver() {
        CommExceptionAjaxResolver r =  new CommExceptionAjaxResolver();

        r.setExceptionAttribute("ex");
        r.setDefaultErrorView("/WEB-INF/jsp/errorPage");    // No default

        Properties mappings = new Properties();
        mappings.setProperty("CommException", "/WEB-INF/jsp/responsebody");
        r.setExceptionMappings(mappings);  // None by default

        return r;

    }



public class CommExceptionAjaxResolver extends SimpleMappingExceptionResolver{

    ObjectMapper mapper = new ObjectMapper();

    @Override
    protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        String viewName =determineViewName(ex, request);  //"/WEB-INF/jsp/responsebody"
        System.out.println("view name : "+ viewName);
        if (viewName != null) {
            String reqAjaxHeader = request.getHeader("AJAX");
            if(reqAjaxHeader != null && reqAjaxHeader.equals("true")){
                response.setStatus(500);
                ModelAndView mav = new ModelAndView();
                mav.setViewName(viewName);
                mav.addObject("errMsg", ex.getMessage());
                System.out.println("test"+ mav.getViewName());
                return mav;
            }
            return getModelAndView(viewName, ex);
        } else {
            if(request.getRequestURI().startsWith("/api/")) {
                try(ServletOutputStream sout = response.getOutputStream()){
                    sout.print(mapper.writeValueAsString(ApiCommResultVo.createFail(ex.getMessage())));
                    sout.flush();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return null;
            }else {
                return getModelAndView("/WEB-INF/jsp/errorPage", ex);
            }
        }
    }
}