상세 컨텐츠

본문 제목

model.getAttribute()와 request.getAttribute()의 주의점

Spring

by shika 2022. 1. 23. 16:09

본문

model.getAttribute()와 request.getAttribute()는

반환값이 Object이다.

그렇기 때문에 꼭 원하는 타입(보통 String, 내가 만든 객체 등)으로 형변환을 해서

사용해야한다. 예를 들면 이런식으로

String data1 = (String)request.getAttribute("data1");

String data2 = (String)model.getAttribute("data2");

이렇게 말이다.

 

그리고 중요한 주의점2

model로 정보를 옮겨도

받고 사용할때는 request를 이용해서 사용한다

(받을 때도 model로 받으면 null로 뜬다)

@GetMapping("/test2")
	public String test2(Model model) {
		model.addAttribute("data2","문자열2"); //저장은 request영역에 저장됨, 즉 받는 GetMapping의 파라미터는 Model이 아닌 Request로 해야함 
		return "forward:result2";
	}

@GetMapping("/result2")
	public String result2(HttpServletRequest request) { //여기서 파라미터에 Model을 주입받으면 밑에줄의 syso에 data2:null이라고뜸
		//String data2 = (String)model.getAttribute("data2"); //model은 forward해도 유지가 되지않음!!! 유지가 되는것은 Request
		String data2 = (String)request.getAttribute("data2"); 
		System.out.println("data2 : "+data2);
		return "result2";
	}

여기서 test2메서드에서 model로 정보를 보냈지만

result2에서는 받을때 model로 받으면 null로 나오게된다.

RequestScope여서 그런것같다..

 

받을 때는 HttpServletRequest의 request로 받아야 정상적으로 사용이 가능하다!!

이점을 주의하도록 하자

 

model로 한번 직접 받아보자

(물론 화면에는 잘나온다. getAttribute와 상관이 없으니 화면은)

model로보낸정보를 또 model로 받을때

하지만 콘솔에 sysout를 찍을때는 

이렇게 null이 뜬다. 

 

model로 받으면 null이 뜨지만

request로 받으면 어떨까?

 

request로 받으면

model로보낸정보를 또 request로 받을때

이렇게 잘뜬다

 

한마디로 자바코드에서 model로 넘긴 정보를 건드릴때는

model이 아닌 request를 이용해서 사용하도록 하자.

 

 

 

관련글 더보기

댓글 영역