UriComponentsBuilder

코코·2020년 8월 27일
0

Spring

목록 보기
14/15
post-custom-banner

UriComponentBuilder

게시물을 POST방식으로 처리하고 나서도 페이지나 검색 조건을 유지하기 위해서는 페이지 정보와 검색 조건, 검색 키워드 정보를 RedirectAttribute객체로 직접 지정해야 했다.

	@PostMapping("/modify")
	public String modify(BoardVO boardVO, PageInfo pageInfo,RedirectAttributes redirect) {
		log.info("/board/modify");
		log.info("BoardVO : " + boardVO);
		
		int result = boardService.modify(boardVO);
		
		log.info("MODIFY RESULT : " + result);
		
		redirect.addAttribute("no",boardVO.getBno());
		redirect.addAttribute("page", pageInfo.getPage());
		redirect.addAttribute("amount", pageInfo.getAmount());
		redirect.addAttribute("type", pageInfo.getType());
		redirect.addAttribute("keyword", pageInfo.getKeyword());
		
		return "redirect:/board/post";
	}

	@PostMapping("/remove")
	public String remove(Long bno, PageInfo pageInfo, RedirectAttributes redirect) {
		log.info("/board/remove");
		
		int result = boardService.remove(bno);
		log.info("result : " + result);

		redirect.addAttribute("page", pageInfo.getPage());
		redirect.addAttribute("amount", pageInfo.getAmount());
		redirect.addAttribute("type", pageInfo.getType());
		redirect.addAttribute("keyword", pageInfo.getKeyword());
		
		return "redirect:/board/list";
	}

이것은 수정/삭제 후에도 검색 조건과 페이지 정보를 유지하기 위해서 직접 redirect한 코드다. 보듯이 remove메서드와 modify메서드 여러 부분이 중복이다. 하나하나 지정하기도 귀찮은 일이고, 중복은 영 찝찝한 일이다. UriComponentBuilder객체를 이용하면 코드를 한 줄로 줄이고, 중복도 제거할 수 있다.

페이지 정보와 검색 정보를 관리하는 PageInfo 객체에 UriComponentBuilder를 이용해서 내가 필요한 Uri를 반환하는 메서드를 만들었다.

	public String getUrlList () {
		UriComponentsBuilder builder = UriComponentsBuilder.fromPath("")
				.queryParam("page", this.getPage())
				.queryParam("amount", this.getAmount())
				.queryParam("type", this.getType())
				.queryParam("keyword", this.getKeyword());
		return builder.toUriString();
	}

Key - Value 형식으로 지정하면 된다. 이 메서드는
?page=8&amount=10&type=tcw&keyword= 이런 uri 문자열을 반환한다.

아래는 UriComponentBuilder을 적용한 다음 remove와 modify메서드 코드다.

	@PostMapping("/modify")
	public String modify(BoardVO boardVO, PageInfo pageInfo,RedirectAttributes redirect) {
		log.info("/board/modify");
		log.info("BoardVO : " + boardVO);
		
		int result = boardService.modify(boardVO);
		
		log.info("MODIFY RESULT : " + result);
		
		redirect.addAttribute("no",boardVO.getBno());
		
		return "redirect:/board/post" + pageInfo.getUrlList();
	}

	@PostMapping("/remove")
	public String remove(Long bno, PageInfo pageInfo) {
		log.info("/board/remove");
		
		int result = boardService.remove(bno);
		log.info("result : " + result);
		
		return "redirect:/board/list" + pageInfo.getUrlList();
	}

중복되는 redirect를 모두 제거했다. remove메서드에서는 더 이상 RedirectAttribute객체를 사용하지 않아도 된다.

post-custom-banner

0개의 댓글