컨트롤러에서 뷰 단으로 파라미터를 전달할 때 여러 가지 방법이 있다.

1) return값에 직접 uri를 작성하여 전달하는 경우

2) RedirectRedirectAttributes의 addAttribute를 사용하는 경우

 

이렇게 두 가지 방법을 사용해봤는데 첫 번째 방법에서는 직접 uri의 파라미터 부분을 작성하다보니 오타가 날 수 있는 위험이 있다.

그리고 두 번째 방법에서는 오타가 날 확률은 줄어들지만 중복된 코드가 생길 수 있다.

a->b,와 c->b로 동일한 파라미터를 전달할 때 를 예로 들 수 있다.

 

그래서 이러한 중복된 코드를 줄이기 위해서 UriComponentsBuilder를 사용하면 된다.

 

사용방법

 

이렇게 코드를 작성하면 getListLing()메소드는 "?pageNum=dd&amount=5&type=W&keyword=dd"의 형태로 반환한다.

이렇게 반환된 주소를 그대로 컨트롤러의 return문 뒤에 붙이면 된다.

public String getListLink() {
		UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromPath("")
				.queryParam("pageNum", this.getPageNum())
				.queryParam("amount", this.getAmount())
				.queryParam("type", this.getType())
				.queryParam("keyword", this.getKeyword());
		 
		return uriComponentsBuilder.toUriString();
	}

 

이렇게 반환된 주소를 그대로 컨트롤러의 return문 뒤에 붙이면 된다.

그러면 "redirect:/board/list?pageNum=dd&amount=5&type=W&keyword=dd" 와 같은 uri를 호출할 수 있다.

@PostMapping("/modify")
	public String modify(BoardVO boardVO, Criteria criteria, RedirectAttributes rttr) {
		if(service.modify(boardVO)) {
			rttr.addFlashAttribute("result", "success");
		}
		log.info("criteria uri: "+criteria.getListLink());
		return "redirect:/board/list"+criteria.getListLink();
	}

 

출력문의 결과이다.

+ Recent posts