7.4. 책 상세 서비스 클래스 메소드 생성
src/main/java/sample/spring/yse/BookServiceImpl.java
@Override
public Map<String, Object> detail(Map<String, Object> map){
return this.bookDao.selectDetail(map);
}
서비스는 DAO를 호출한 결과를 바로 리턴하는 일만 한다.
7.5. 책 상세 서비스 인터페이스 메소드 시그니쳐 생성
src/main/java/sample/spring/yse/BookService.java
Map<String, Object> detail(Map<String, Object> map);
메소드 시그니쳐 생성도 잊지 말자. 클래스 메소드에서 이클립스의 기능을 활용해 만들면 된다.
7.6 쿼리 스트링
책 상세 화면의 URI는 /detail?bookId=1 형식이다. 주소창을 통해 파라미터가 서버로 전달되는 형태를 쿼리 스트링(Query String)이라고 부른다.
HTTP 규격에서 쿼리 스트링은 URL(Uniform Resource Locator) 끝에 ?로 시작한다. 각 항목은 &로 이어지며, 개별 항목의 키와 값은 =로 구분하게 된다.
예를 들어 /sample/test?a=1&b=2 웹 주소가 있다고 해 보면 아래와 같다.
- URL : /sample/test
- 쿼리 스트링 : ?a=1&b=2
- 쿼리 스트링의 시작 : ?
- 쿼리 스트링의 항목 구분 : &
- 쿼리 스트링의 항목들 : a=1 ,b=2
- URI : /sample/test?a=1&b=2
7.7. 책 상세 컨트롤러 메소드 추가
책 상세 URL이 입력되면 실행되는 메소드를 작성하자.
src/main/java/sample/spring/yse/BookController.java
@RequestMapping(value = "/detail", method = RequestMethod.GET)
public ModelAndView detail(@RequestParam Map<String, Object> map) {
Map<String, Object> detailMap = this.bookService.detail(map);
ModelAndView mav = new ModelAndView();
mav.addObject("data", detailMap);
String bookId = map.get("bookId").toString();
mav.addObject("bookId", bookId);
mav.setViewName("/book/detail");
return mav;
}
@RequestParam 어노테이션에 의해 쿼리 스트링 파라미터를 읽을 수 있다. 스프링은 http 메소드를 구분하지 않고 파라미터를 GET, POST 동일한 방법으로 읽을 수 있게 한다.