Spring Boot(MVC)保持对象信息以将其传递给更多URL

时间:2017-11-10 17:01:43

标签: spring-mvc session spring-boot

我正在尝试使用专门用于管理医生的患者数据库的应用程序,并且在保留有关通过post request方法发送的对象的信息方面存在一些问题。我想让他们在URL中被记住。我尝试用@SessionAttributes做一些事情,但我认为我不太了解它。

这是我的控制人员:

@Controller
@SessionAttributes("loggedInPersonelID")
@RequestMapping
public class PatientManagerController {

@Autowired
private PatientService patientService;

@Autowired
private PersonelService personelService;


private Personel getLoggedInPersonel(String personelID) {
    return personelService.getPersonel(personelID);
}

@GetMapping
public ModelAndView getLoginView() {
    ModelAndView mav = new ModelAndView("login-view");
    mav.addObject("personel", new Personel());
    return mav;
}

方法帖子将用户登录到下一个网址/user={id}(使用RedirectAttributes)

@PostMapping
    public String loginUser(@ModelAttribute("personel") Personel personel,
                            RedirectAttributes redirectAttrs,
                            Model model) {

        Personel loggedInPersonel = getLoggedInPersonel(personel.getPersonelID());
        model.addAttribute("loggedInPersonelID", loggedInPersonel.getPersonelID());

        if (loggedInPersonel != null) {
            if (loggedInPersonel.getPassword().equals(personel.getPassword())) {

                redirectAttrs.addAttribute("id", loggedInPersonel.getPersonelID());
                return "redirect:/user={id}";
            } else {
                model.addAttribute("errorMessage", "Invalid credentials!");
                return "login-view";
            }
        } else {
            model.addAttribute("errorMessage", "User with given ID does not exist");
            return "login-view";
    }
}

这是我的get方法,用于捕获登录用户的视图。由于模型是在之前的post方法中传递的,因此URL在这里工作。我有/user=john-smith-123

之类的东西
@GetMapping("/user={id}")
public ModelAndView getUserMainView(@PathVariable("id") String personelID) {
    ModelAndView mav = new ModelAndView("personel-main-view");
    Personel loggedInPersonel = getLoggedInPersonel(personelID);

    mav.addObject("personelOccupation", loggedInPersonel.getOccupation());
    mav.addObject("personelName", loggedInPersonel.getName());
    mav.addObject("personelSurname", loggedInPersonel.getSurname());
    return mav;
}

然而,下一页不再记住用户的ID。我认为将它传递给模型的属性,其名称与@SessionAttributes("loggedInPersonelID")中确定的名称相同。

@GetMapping("/user={id}/patients")
public ModelAndView getPatientsView(@PathVariable("id") String personelID) {
    ModelAndView mav = new ModelAndView("patients-view");
    Personel loggedInPersonel = getLoggedInPersonel(personelID);
    mav.addObject("loggedInPersonelID", loggedInPersonel.getPersonelID());
    mav.addObject("list", patientService.getPersonelsList(loggedInPersonel));
    return mav;
}

网址中的结果:user=$%7BloggedInPersonelID%7D/patients和错误There was an unexpected error (type=Internal Server Error, status=500). No message available

这是personel-main-view视图中的链接,可以将我移至所需的页面

<a th:href="@{/user=${loggedInPersonelID}/patients}">My patients</a>

那我该怎么做?对不起凌乱的代码。这个问题比看起来更复杂吗?我有什么更深的东西吗?

PS。我正在和百里香一起工作

1 个答案:

答案 0 :(得分:0)

试试这个:

<a th:href="@{/user=__${loggedInPersonelID}__/patients}">My patients</a>

如图所示here