Chanho_Park

[JAVA] Controller에서 Redirect 객체 넘기기 본문

Spring

[JAVA] Controller에서 Redirect 객체 넘기기

Chanho_Park 2022. 11. 13. 17:53
728x90

 

Controller에서 많은 변수들을 받아와 그것들을 다시 

 

다음 Controller에 넘기고 싶을 때가 있다.

 

지금까지

 

return redirect+"?whatColumn="+searchvo.getWhatColumn()+"&keyword="+searchvo.getKeyword()+"&pageNumber="+searchvo.getPageNumber();

 

이런 식으로 return 할 때 모든 변수를 붙히곤 했다.

 

코드도 깔끔하지 못할 뿐더러 보기에도 너무 힘들다.

 

 

 

[해결방법]

 

redirect 시 데이타를 전달할 수 있는 방법

 

  • RedirectAttributes 클래스를 사용하여 전달할 수 있다.
  • RedirectAttributes 클래스는 Spring 3.1 버전에 추가되었다고 한다.
  • redirect시 RedirectAttributes 클래스를 이용해 효과적으로 alert창을 띄울수도 있다.

 

 

1. 먼저 이 변수들을 담을 수 있는 객체를 만들어 준다.

 

public class SearchVO {
	private String whatColumn;
	private String keyword;
	private String pageNumber;
	private String item_no;

 

 

2. 이 객체를 받아서 다른 곳으로 넘길 controllere에서는 이렇게 작성한다.

 

다른 건 마음대로 써도 되지만

필자는 SearchVO 라는 객체를 받아왔고 어떤 작업을 거친 후에

redirect해서 다른 controller에 보낼 예정이다.

 

 

addFlashAttribute를 통해 object 를 전달할 수가 있다. 

여러개의 데이타(변수)들을 하나의 object(map, list, vo)등에 넣어서 전달을 한다.

(코드가 엄청 깔끔해진다)

@GetMapping("/delete")
	public String delete(SearchVO searchvo,RedirectAttributes rttr) {
		
		service.deleteOne(searchvo.getItem_no());
		rttr.addFlashAttribute("searchvo",searchvo); // rttr에 담는다.
		return redirect;
	}

 

 

이렇게 해주고 이제 redirect 되는 곳의 controller 에서는 

SearchVO를 받아서 사용 할 것이다.

 

 

@GetMapping(value="/list", produces = "application/text;charset=utf8")
	public void clientlist(SearchVO searchvo,HttpServletRequest request) {				
		
		// redirect로 객체받기
		Map<String, ?> flashMap = RequestContextUtils.getInputFlashMap(request);
		if(flashMap!=null)
		searchvo =(SearchVO)flashMap.get("searchvo");
		
        
        // 이곳에서 작업
		int totalCount = service.getTotalCount(searchvo);
		

		
	}
728x90