2011-12-14 2 views
66

요청 및 세션 속성을 직접 처리하고 싶습니다. 예를 들어 쿠키 처리 로그인에 대해 @SessionAttributes을 사용합니다.Spring 3 컨트롤러에서 HttpRequest에 액세스하는 MVC

컨트롤러 내에서 HttpRequest에 액세스하는 방법을 알 수 없으므로 @RequestAttribute 위의 레이어로 이동하여 HttpRequest에 액세스해야합니다. Stripes에서는 ApplicationContext을 구현하고 getAttribute()을 호출하여이 작업을 수행했습니다.

또한, 전달 매개 변수로 HttpServletRequest이 작동하지 않는 것 같다

@RequestMapping(value="/") public String home(HttpServletRequest request){ 
    System.out.println(""+request.getSession().getCreationTime()); 
    return "home"; 
} 

위의 방법은 아무것도 인쇄되지 않습니다.

이 문제에 대해 조언이 있으십니까?

답변

133

스프링 MVC는 당신에게 줄 것이다 HttpRequest를 당신은 당신의 컨트롤러 메소드 서명에 추가하는 경우 : 예를 들어

:

/** 
* Generate a PDF report... 
*/ 
@RequestMapping(value = "/report/{objectId}", method = RequestMethod.GET) 
public @ResponseBody void generateReport(
     @PathVariable("objectId") Long objectId, 
     HttpServletRequest request, 
     HttpServletResponse response) { 

    // ... 
    // Here you can use the request and response objects like: 
    // response.setContentType("application/pdf"); 
    // response.getOutputStream().write(...); 

} 

당신이 볼 때, 단순히 서명에 HttpServletRequestHttpServletResponse 개체를 추가 Spring MVC가 이들 객체를 컨트롤러 메소드에 전달하도록 만든다. HttpSession 개체도 필요합니다.

EDIT : HttpServletRequest/Response가 Spring 3에서 작동하지 않는 것 같습니다. Eduardo Zola가 지적했듯이 Spring WebRequest/WebResponse 객체를 사용해보십시오.

스프링 MVC가 자동으로 처리기 메소드에 삽입 할 수있는 list of supported arguments을 살펴볼 것을 강력히 권장합니다.

+0

안녕, 힌트에 대한 들으, 난 내가 잘못 뭘하는지 잘 모릅니다하지만이 작동하지 않습니다 : \t @RequestMapping (값 = "/") \t 공공 문자열 홈 (HttpServletRequest의 요청 : 그것은 인쇄 아무것도하지 않습니다) { \t \t \t System.out.println (""+ request.getSession(). getCreationTime()); \t \t \t \t return "home"; \t \t \t} 이것은 현재의 pof millis를 pring해야하지만 그렇지 않습니다. 또한 @RequestBody가있는 메소드에 주석을 달아도 아무런 변화가 없습니까? thx for – JBoy

+1

두 번째 JBoy도 작동하지 않습니다. –

+1

Spring MVC의 지원되는 인수에 대한 @jjmontes에 감사드립니다! – Barett

53

나는이 오래된 질문 알아요,하지만 ...

당신은 또한 당신의 클래스에서 이것을 사용할 수 있습니다

@Autowired 
private HttpServletRequest context; 

그리고 당신에 대한 사용이 HttpServletRequest의 현재 인스턴스를 제공 할 것이다 방법.

+3

이렇게하면 컨트롤러 빈이 싱글 톤이되지 않도록 할 수 있습니까? – jjmontes

+1

스프링 컨트롤러는 항상 싱글 톤입니다. –

+7

이 잘못 느낌 - 컨트롤러가 주어진 시간에 하나 개 이상의 요청을 처리 무슨 경우? 그러면 "현재"요청은 무엇입니까? – sbk

관련 문제