@SessionAttributes和@GetMapping

时间:2019-02-15 12:54:51

标签: java spring spring-mvc spring-session

我有一个带有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的情况下是一个空对象。

0 个答案:

没有答案