브라우저에서 컨트롤러로 데이터 전달(Spring)

Structure of Knowledge·2021년 1월 18일
1

브라우저에서 컨트롤러로 get방식 또는 post방식으로 데이터를 전달받았을 때, Spring에서 처리하는 방법을 정리함.
(항상 서블릿만을 이용했던 MVC작업과 비교해서 확인할 것.)

<a href="sample/param1?name=홍길동&age=24">m05</a>
<a href="sample/param2?name=이순신&age=27">m06</a>
<a href="sample/param3?names=김좌진&names=유관순&names=강감찬">m07</a>
<a href="sample/param4?ns=김좌진&ns=유관순&ns=강감찬">m08</a>
<a href="sample/param5?names=김좌진2&names=유관순2&names=강감찬2">m09</a>
		      	
<!--<a href="sample/param6?list[0].name=홍길동&list[0].age=24&list[1].name=이순신&list[1].age=27">m10</a>-->
<a href="sample/param6?list%5B0%5D.name=홍길동&list%5B0%5D.age=24&list%5B1%5D.name=이순신&list%5B1%5D.age=27">m10</a>

<a href="sample/param7?name=홍길동&age=24&page=10">m11</a>
<a href="sample/param8?subject=데이트&cdate=2021/01/18 17:10:33">m12</a>하세요
  1. url: "param6" 부분을 보면 이름이 list인 배열을 url에 바인딩해서 넘겨준다. 이 때, []는 html에서 금지된 기호인데, 이를 어떻게 바인딩 해야하는가?( " [ " : %5B, " ] " : %5D )

위와 같이 get방식으로 브라우저에서 데이터를 넘길 때,

@RequestMapping(value="/param1")
public void m05(Human human) {
	log.info("dto: "+ human);	//DTO로 전달
}
@RequestMapping(value="/param2")
public void m06(@RequestParam String name, @RequestParam int age) {
	log.info("파람이름: "+name);	//파라미터이름으로 전달
	log.info("파람나이: "+age);	//뷰에서 넘겨주는 파라미터의 이름과 변수 이름이 같아야한다
}
@RequestMapping("/param3")
public void m07(@RequestParam ArrayList<String> names){
	log.info("m07() names: " + names);	//동일한 파라미터에 여러 데이터를 전달했을 때, 배열로 받을 수 있다 
}
@RequestMapping("/param4")
public void m08(@RequestParam("ns") ArrayList<String> names){
	log.info("m08() names: " + names);	//(흔하지 않음)넘어오는 파라미터 이름과 변수이름이 다를 때, 이렇게 받을 수 있다. 
}
@RequestMapping("/param5")
public void m09(@RequestParam String[] names){
	log.info("m09() names: " + names);	//동일한 파라미터에 여러 데이터를 전달했을 때, 배열로 받을 수 있다
	for(String name: names) log.info("name: "+name);
}
@RequestMapping("/param6")
public void m10(HumanList hlist) {
	log.info("배열 안의 내용을 출력 : "+hlist); 	//겟메소드를 쓰지 않고, 배열안의 내용을 출력해줄수 있는 기법. ****
}
@RequestMapping(value="/param7")
public void m011(Human human, @RequestParam int page) {
	log.info("dto: "+ human);	//DTO로 전달 + DTO에 없는 변수
	log.info("page: "+ page);
}
@RequestMapping("/param8")
public void m12(ToDoDTO dto)  {
	log.info("m12() dto.getCdate(): " + dto.getCdate());	//시간데이터의 전달 ToDoDTO에서 패턴어노테이션
}

request.getParameter("파라미터이름")를 쓰지 않고, 전달받은 데이터를 쓸 수 있다.

  1. DTO로 전달받을 때, 메소드의 인자로 DTO를 이용(파라미터와 DTO의 멤버 이름이 같아야함)

  2. @RequestParam 을 메소드 인자로 이용(파라미터 이름으로 전달)

  3. 브라우저에서 동일한 파라미터에 여러 값을 보낼 수 있다. 배열로 받으면 된다(컬렉션 혹은 정적배열로)( request.getParamValues() 를 이용해 받았음)

  4. m10() 메소드의 경우는 DTO를 엘리먼트로 하는 컬렉션을 받을 때, enhanced for문을 이용하여 getter메소드를 쓰지 않고, 바로 DTO의 내용을 볼 수 있는 기법이라 한다.(HumanList.java 를 참고할 것)

  5. DTO와 @RequestParam을 동시에 인자로 쓸 수 있다.

  6. m12() 메소드는 java.util.Date 타입의 데이터를 받는 방법이다.(ToDoDTO.java를 참고)

profile
객체와 제어, 비전공자 개발자 되기

1개의 댓글

comment-user-thumbnail
2021년 1월 19일

파인트라고요 파인트

답글 달기