2012-12-16 6 views
7

말에서 오류 페이지 컨트롤러에서 에러가 이끄는 URL (404) 받기, 나는 다음과 같은 web.xml의 항목으로 봄 MVC 응용 프로그램이 :스프링 MVC

@RequestMapping({"","/"}) 
@Controller 
public class RootController { 

    @RequestMapping("error/{errorId}") 
    public String errorPage(@PathVariable Integer errorId, Model model) { 
     model.addAttribute("errorId",errorId); 

     return "root/error.tile"; 
    } 
} 

사용자가 오류 페이지 컨트롤러를 트리거 한/user/show/iamnotauser가 존재하지 않는 URL을 요청했습니다. RootController의 errorPage() 메소드에서이 존재하지 않는 '/ user/show/iamnotauser'URL을 모델에 넣고 오류 페이지에 표시하려면 어떻게합니까?

답변

14

트릭은 요청 속성이 javax.servlet.forward.request_uri이며 원래 요청 된 URI가 포함되어 있습니다. 당신은 여전히 ​​서블릿 API 2.5을 사용하는 경우

@RequestMapping("error/{errorId}") 
public ModelAndView resourceNotFound(@PathVariable Integer errorId, 
                HttpServletRequest request) { 
    //request.getAttribute("javax.servlet.forward.request_uri"); 
    String origialUri = (String) request.getAttribute(
               RequestDispatcher.FORWARD_REQUEST_URI); 

    return new ModelAndView("root/error.jspx", "originalUri", origialUri); 
} 

, 다음 일정 RequestDispatcher.FORWARD_REQUEST_URI가 존재하지 않습니다,하지만 당신은 request.getAttribute("javax.servlet.forward.request_uri")를 사용할 수 있습니다. 또는 javax.servlet:javax.servlet-api:3.0.1로 업그레이드

+0

우리는 Servlet API 3.0.x를 지원하지만 web.xml의 사양으로 2.5를 사용하는 서버에 있습니다. 이 설정으로 위의 접근법은 아무런 도움이되지 않지만'request.getAttribute ("javax.servlet.error.request_uri");'트릭을 수행했다. –