09.02. 책 수정 기능 만들기 - 2

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 에 접속해 실제로 데이터를 입력해 본다.

수정이 끝나면 상세 페이지에서 변경된 데이터가 나오는지 확인한다.