我有一个@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
中访问此信息,并且该信息为空。我想知道为什么。