TMDB API로 정보 불러오기 下

부추·2022년 4월 11일
1

위와 같이 컨텐츠 타입별로 출력 결과를 다르게 하기 위한 작업

<button	onclick="location.href='${pageContext.request.contextPath}/main/main.do?type=movie'">영화</button>
<button onclick="location.href='${pageContext.request.contextPath}/main/main.do?type=tv'">TV</button>

jsp에서 url을 통해 parameter 값을 컨트롤러로 전달할 수 있도록 한다.

3. 컨트롤러에서 데이터 처리하기

@Controller
public class MainController {
	@RequestMapping("/main/main.do")
    										// jsp에서 전달받은 컨텐츠 타입
	public ModelAndView main(@RequestParam(value = "type", defaultValue = "movie") String contents_type) {

		// 영화 정보를 불러오는 클래스 (이전 글에서 설명한 데이터 파싱 전용 클래스)
		GetInfoUtil util = new GetInfoUtil();
        
		List<ContentsVO> release_date = null;
		release_date = util.getInfoList(contents_type);
        
		// List에 담긴 ContentsVO를 날짜 내림차순으로 정렬
		Collections.sort(release_date, new SortByDate());

		ModelAndView mav = new ModelAndView();
		mav.setViewName("main");
		
		mav.addObject("release_date", release_date); // 최신 공개 순
		
		return mav;
	}
}

VO의 특정 값으로 List 정렬하기

또한 VO의 특정 값으로 List를 정렬하기 위해(평점 순, 공개 순) Comparator 인터페이스를 사용해서 클래스를 생성해줬다. → 참조

public class SortByDate implements Comparator<ContentsVO> {
	@Override
	public int compare(ContentsVO o1, ContentsVO o2) {
		Date first = o1.getRelease_date();
		Date second = o2.getRelease_date();
		return second.compareTo(first);
	}
}

4. 뷰(jsp)에서 데이터 출력하기

그리고 jsp에서는 아래와 같이 c:forEach 를 사용해서 데이터를 반복해서 출력해주면 된다!

<ul>
    <li>
        <c:forEach var="release_date" begin="0" end="19" step="1" items="${release_date}"> // 한 row에 최대 20개까지만 출력되도록
            <a href="${pageContext.request.contextPath}/contents/detail.do?contents_type=${release_date.contents_type }&contents_num=${release_date.contents_num}">
                <div>
                    <div>
                        <img src="${release_date.poster_path }">
                    </div>
                </div>
                <div>
                    <div>${release_date.title }</div>
                    <div>
                        <fmt:formatDate value="${release_date.release_date }" pattern="yyyy-MM-dd" />
                    </div>
                    <div>
                        <span>평균</span>
                        <span>
                            ${Math.ceil((release_date.vote_average)/2*10)/10} </span>
                    </div>
                    <div>인기도 :
                        ${release_date.popularity }</div>
                </div>
            </a>
        </c:forEach>
    </li>
</ul>

결과물!

profile
부추가 좋아요

0개의 댓글

관련 채용 정보