Controller
이 예에서는 로그인 한 UserDetails 구현체인 Reader 세션 객체를 @Controller의 메서드의 파라미터로 받아올 수 있음을 보인다.
package com.example.demo.controller;
import com.example.demo.repository.ReadingListRepository;
import com.example.demo.vo.Book;
import com.example.demo.vo.Reader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
@RequestMapping("/")
@Controller
public class ReadingListController {
private ReadingListRepository readingListRepository;
@Autowired
public ReadingListController(ReadingListRepository readingListRepository) {
this.readingListRepository = readingListRepository;
}
@RequestMapping(method = RequestMethod.GET)
public String readersBooks(Reader reader, Model model) {
//여기서 파라미터로 받아 온 Reader reader 는 로그인 한 UserDetails 구현체이다.
List<Book> bookList = readingListRepository.findByReader(reader);
if (Objects.nonNull(bookList)) {
model.addAttribute("books", bookList);
model.addAttribute("reader", reader);
}
// Optional.ofNullable(bookList)
// .ifPresent((self) -> {
// model.addAttribute("books", bookList);
// model.addAttribute("reader", reader);
// });
return "readingList";
}
@RequestMapping(method = RequestMethod.POST)
public String addToReadingList(Reader reader, Book book) {
//여기서 파라미터로 받아 온 Reader reader 는 로그인 한 UserDetails 구현체이다.
book.setReader(reader);
readingListRepository.save(book);
return "redirect:/";
}
}