我有以下 Controller 逻辑。但是,如果我导航到一个不存在的页面(例如/random-page),我最终会遇到 TemplateInputException。我怎样才能捕获这个并转到 404 页面?

@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; 
 
} 

请您参考如下方法:

我的 spring-boot 解决这个问题的方法(exception is view with message 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"; 
    } 
} 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!