我有一个@ControllerAdvice类,该类用于在整个应用程序中设置用户配置文件信息。这样,我就可以在每个JSP中获得用户概要文件。但是,我试图像这样在@Controller中访问该对象没有成功:

@ControllerAdvice
public class CommonControllerAdvice {

    @ModelAttribute("PROFILE")
    public Profile populateUserProfile(HttpSession session){
        return (Profile) session.getAttribute("PROFILE");
    }
}


@Controller
public class ActivityController {

    @GetMapping("/view/activity/{id}")
    public ModelAndView getActivity(ModelAndView modelAndView, @PathVariable Integer id) {
        Profile profile = (Profile) modelAndView.getModel().get("PROFILE");
    ... ...
    }
}


但是我只得到一个NullPointerException,因为配置文件为空。但是,我知道它不是null,因为我可以在相关的JSP中使用它。

最佳答案

我找到了解决方案。只需将@ModelAttribute类中定义的@ControllerAdvice作为参数传递,而不是尝试从ModelAndView获取它。

@Controller
public class ActivityController{

   @GetMapping("/view/activity/{id}")
   public ModelAndView getActivity (
       ModelAndView modelAndView,
       @ModelAttribute Profile profile,
       @PathVariable Integer id) {
            //Profile object is well populated
            //However I don't understand why this model is empty
          ModelMap model = modelAndView.getModelMap();
          ...
   }
}


它解决了我的问题,并且我对该解决方案感到满意,但是,我希望能够直接在ModelMap中访问此信息,并且该信息为空。我想知道为什么。

10-02 23:59