我有一个带有SessionAttributes的控制器,该控制器映射到类上,而ModelAttribute则从数据库中获取一个对象(如果不存在)并将其设置为session属性,但是由于某种原因,它无法正常工作。
控制器
@Controller
@SessionAttributes(types = Student.class)
public class UserController {
private Student cachedStudent;
..... some code
@GetMapping("/profile")
public String profile(@ModelAttribute Student student, Model model) {
model.addAttribute("student", student);
return "profile";
}
@ModelAttribute
public Student getStudent() {
if (nonNull(cachedStudent)
&& cachedStudent.getUsername().equals(SecurityContextHolder.getContext().getAuthentication().getName())) {
return cachedStudent;
}
if (nonNull(SecurityContextHolder.getContext().getAuthentication().getName()) &&
!Objects.equals(SecurityContextHolder.getContext().getAuthentication().getName(), "anonymousUser")) {
cachedStudent = studentService.findByUsername(SecurityContextHolder.getContext().getAuthentication().getName());
return cachedStudent;
}
return new Student();
}
}
正如我所知道的,每次使用@ModelAttribute调用控制器中的Student对象时,它都会调用带有此注释注释的方法,并重置/更新会话属性。但是结果是在存在cachedStudent的情况下是一个空对象。