簡體   English   中英

Spring 3 HandlerInterceptor將信息傳遞給控制器

[英]Spring 3 HandlerInterceptor passing information to Controller

我已經設置了一個Spring HandlerInterceptor來向HttpServletRequest添加一個屬性,以便能夠從Controller讀取它,可惜的是這似乎不起作用,這對我來說似乎很奇怪。 我做錯了嗎? 任何想法如何將數據從攔截器傳輸到控制器?

這是兩個受影響類的簡化代碼

public class RequestInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        request.setAttribute("my-role", "superman");
    }
   [...]
}

@RestController
@RequestMapping("Test")
public class TestController {
    public final Logger logger = LoggerFactory.getLogger(getClass());

    @RequestMapping(value = "something")
    public void something(HttpServletRequest request) {
        logger.info(request.getAttribute("my-role"));
    }

    [...]
}

request.getAttribute(“ my-role”)返回null……但是如果我在HandlerInterceptor的postHandle中讀取它,它的確會返回例外值,我感覺好像丟失了一些東西……

編輯:我發現通過帶有“ request.getSession()。setAttribute”的會話可以起到吸引作用,但我仍然不明白為什么請求本身在這種用例中不起作用。

您可以嘗試使用會話代替下面的請求嗎?

  public boolean preHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler) throws Exception {
                ...
                HttpSession session = request.getSession();
                session.setAttribute("attributeName", objectYouWantToPassToHandler);
                ....
                }
    In your handler handleRequest method:

       public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {                

            ....
            HttpSession session = request.getSession();
            objectYouWantToPassToHandler objectYouWantToPassToHandler = session.getAttribute("attributeName");
            ....


  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM