2017-01-02 60 views
2

私は以下のコントローラロジックを持っています。ただし、存在しないページ(/ランダムページなど)に移動すると、TemplateInputExceptionが発生します。どのように私はこれをキャッチし、404ページに行くことができますか?Handle org.thymeleaf.exceptions.TemplateInputException

@RequestMapping(value = { "{path:(?!resources|error).*$}", "{path:(?!resources|error).*$}/**" }, headers = "Accept=text/html") 
public String index(final HttpServletRequest request) { 
    try { 
     String path = (String) request.getAttribute(
       HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); 
     return path.split("/")[1]; 
    } catch (Exception e) { 
     log.error("Failed to render the page. {}",e); 
     return "error/general"; 
    } 
} 

ThymeleafはexceptionHandlerのを無視しているように見える:

@ExceptionHandler(Exception.class) 
public ModelAndView handleAllException(Exception ex) { 

    ModelAndView model = new ModelAndView("error/generic_error"); 
    model.addObject("errMsg", "this is Exception.class"); 

    return model; 

} 
+1

あなたは解決策を発見しましたまだですか? – Kousalik

答えて

0

私の回避策この問題春ブート用(exceptionmessageのparamと図である):

@Controller 
public class ErrorController implements org.springframework.boot.autoconfigure.web.ErrorController { 
    private static final String ERROR_PATH = "/error"; 

    @Autowired 
    private ErrorAttributes errorAttributes; 

    @Override 
    public String getErrorPath() { 
     return ERROR_PATH; 
    } 

    @RequestMapping(ERROR_PATH) 
    public String error(HttpServletRequest request, Model model) { 
     Map<String, Object> errorMap = errorAttributes.getErrorAttributes(new ServletRequestAttributes(request), false); 
     String exception = (String) errorMap.get("exception"); 
     if (exception != null && exception.contains("TemplateInputException")) { 
      errorMap.put("message", "Неверный запрос"); 
     } 
     model.addAllAttributes(errorMap); 
     return "exception"; 
    } 
} 
関連する問題