В контроллере Spring Boot возможно ли получить доступ к RedirectAttributes
в методе без RedirectAttributes
в его подписи? Другими словами, можно ли получить к нему доступ из фреймворка как «bean» или контекстную переменную?
Моя мотивация для этого состоит в том, чтобы иметь возможность реорганизовать несколько методов отображения запросов (например, Чистый код *) 1006 *) убрать обработку исключений из этих методов. Так, например, у меня есть несколько методов с блоком catch
, например:
@GetMapping("/security/user/{uid}")
public String showEditUserForm(@PathVariable("uid") String uid, Model model, RedirectAttributes redirectAttributes) {
try {
model.addAttribute("userAccount", userAccountService.findByUsername(uid));
return "/security/edituser";
} catch(UserDoesntExistException e) {
redirectAttributes.addFlashAttribute("flashstatus","danger");
redirectAttributes.addFlashAttribute("flashmessage","User doesn't exist");
return "redirect:/security";
}
}
Вместо этого я хотел бы сделать что-то вроде этого:
@GetMapping("/security/user/{uid}")
public String showEditUserForm(@PathVariable("uid") String uid, Model model) {
try {
model.addAttribute("userAccount", userAccountService.findByUsername(uid));
return "/security/edituser";
} catch(UserDoesntExistException e) {
return redirectWithMessage("danger","User doesn't exist");
}
}
// and several other mappings that also call redirectWithMessage()
public String redirectWithMessage(String status, String message) {
// obtain RedirectAttributes somehow!
redirectAttributes.addFlashAttribute("flashstatus",status);
redirectAttributes.addFlashAttribute("flashmessage",message);
return "redirect:/security";
}
Таким образом, вопрос в том, как вспомогательный метод ("redirectWithMessage
") может получить указатель на RedirectAttributes
, при этом каждый метод в классе не должен иметь его в своей сигнатуре и передать его посредством инъекции?