9.5. 책 수정 기능 서비스 인터페이스 메소드 시그니쳐 생성
src/main/java/sample/spring/yse/BookService.java
boolean edit(Map<String, Object> map);
서비스 인터페이스 메소드는 기계적으로 만들면 된다.
9.6. 책 수정 기능 컨트롤러 메소드 추가
src/main/java/sample/spring/yse/BookController.java
@RequestMapping(value = "update", method = RequestMethod.POST)
public ModelAndView updatePost(@RequestParam Map<String, Object> map) {
ModelAndView mav = new ModelAndView();
boolean isUpdateSuccess = this.bookService.edit(map);
if (isUpdateSuccess) {
String bookId = map.get("bookId").toString();
mav.setViewName("redirect:/detail?bookId=" + bookId);
}else {
mav = this.update(map);
}
return mav;
}
책 수정 화면에서 책 수정 기능으로 보내주는 파라미터는 총 4개다.
하나는 GET 파라미터로 전달되는 bookId다.
/update?bookId=1
나머지 세개는 <form> 태그를 통해 전달되는 title, category, price다.
<p>제목 : <input type="text" name="title" value="${ data.title }" /></p>
<p>카테고리 : <input type="text" name="category" value="${ data.category }" /></p>
<p>가격 : <input type="text" name="price" value="${ data.price }" /></p>
스프링은 http 메소드가 GET인지 POST인지 상관하지 않고 @RequestMapping 어노테이션이 있으면 무조건 파라미터를 넣어준다. 따라서 파라미터 map 안에는 4개 데이터가 다 들어있다. map 데이터 예시는 아래와 같다.
{
"bookId": 1,
"title": "제목 수정",
"category": "IT",
"price", "10000"
}
정상적으로 데이터가 갱신되었을 경우 확인을 위해 상세 페이지로 이동하면 된다.
if (isUpdateSuccess) {
String bookId = map.get("bookId").toString();
mav.setViewName("redirect:/detail?bookId=" + bookId);
}
만약 갱신이 안 되었을 경우 GET 메소드로 리다이렉트하는 방법도 있겠지만, 갱신 화면을 바로 다시 보여줄 수도 있다.
mav = this.update(map);
9.7. 책 수정 기능 확인
브라우저에서 http://localhost:8080/update?bookId=1 에 접속해 실제로 데이터를 입력해 본다.
수정이 끝나면 상세 페이지에서 변경된 데이터가 나오는지 확인한다.