Spring - RedirectAttributes(잘못된 부분 많음)
이 글을 쓰게 된 가장 큰 이유는 리다이렉트를 구현해야하는 상황에서 내가 이전에 쓴 글을 보다가 크게 잘못된 부분이 있어서 다시 작성하려고 한다.
리다이렉트는 GET 요청이므로 model에 정보를 넣어서 스프링 내부에서 정보를 전달하는 일은 불가능하다. 하지만 이런 기본적인 내용을 글 작성 당시 생각하지 못하고 model로 정보를 넘겨준다고 작성했다.
Spring 환경에서 리다이렉트를 실행할 때 정보를 넘겨주는 방법들을 조사했다
redirectAttributes.addAttribute("page", 1);
redirectAttributes.addAttribute("userId", user.getId());
return "redirect:/board/list";
리다이렉트 후 데이터 받기
@GetMapping("/board/list")
public String list(@RequestParam("userId") Long userId, Model model) {
User user = userService.findById(userId);
model.addAttribute("user", user);
return "board/list";
}
redirectAttributes.addFlashAttribute("user", user);
redirectAttributes.addFlashAttribute("msg", "Operation successful");
return "redirect:/board/list";
리다이렉트 후 데이터 받기:
@GetMapping("/board/list")
public String list(Model model) {
if (model.containsAttribute("user")) {
User user = (User) model.getAttribute("user");
// user 정보 사용
}
return "board/list";
}
session.setAttribute("user", user);
return "redirect:/board/list";
리다이렉트 후 데이터 받기:
@GetMapping("/board/list")
public String list(HttpSession session, Model model) {
User user = (User) session.getAttribute("user");
model.addAttribute("user", user);
return "board/list";
}
Cookie userCookie = new Cookie("userId", String.valueOf(user.getId()));
userCookie.setMaxAge(60 * 60); // 쿠키 유효 시간 설정 (1시간)
response.addCookie(userCookie);
return "redirect:/board/list";
리다이렉트 후 데이터 받기:
@GetMapping("/board/list")
public String list(@CookieValue(value = "userId", defaultValue = "0") Long userId, Model model) {
if (userId != 0) {
User user = userService.findById(userId);
model.addAttribute("user", user);
}
return "board/list";
}
return "redirect:/board/list/user/" + user.getId();
리다이렉트 후 데이터 받기:
@GetMapping("/board/list/user/{userId}")
public String list(@PathVariable Long userId, Model model) {
User user = userService.findById(userId);
model.addAttribute("user", user);
return "board/list";
}
각각 용도에 맞는 방식을 선택하는 것이 좋다.
이전에 쓴 글이 너무 잘못되었다는 것을 안 순간 얼굴이 화끈해지는 것을 느꼈다. 내 글을 본 사람들이 '이 사람은 정말 기본도 못하는구나' 라는 생각을 하는 것이 당연하다고 생각했다. 그래서 글을 처음 본 순간 바로 삭제하거나 수정하려고 했었다. 하지만 글을 수정하면서 글을 쓰게 된 이유가 나의 공부 때문이라는 것을 다시 생각하는 순간 수정을 그만뒀다. 내가 이 글을 작성하는 이유가 나의 성장 때문인데 나의 부족한 점을 가리기 위해 노력하는 것이 잘못되었다고 생각한다. 가끔은 기본도 잘 안지키고 모자란 부분 투성이지만 이렇게 수정하면서 나아가면 된다고 생각한다.