[스프링] @ModelAttribute, @RequestParam, @RequestBody

Nux·2022년 6월 24일
0

@ModelAttribute, @RequestParam, @RequestBody

  • 요청 데이터를 JAVA에서 사용 할 수 있도록 만들어줌

@ModelAttribute

@ModelAttribute[(“사용할 이름”)]
  • 요청 데이터와 Controller의 파라미터를 1:n(객체) 매핑
  • Form이나 쿼리스트링 데이터를 처리 할 때 사용

예시

/* StudentVO.class */
private String name;
private int age;

/* Controller.class */
public void test(@ModelAttribute StudentVO studentVO){ 
model.addAttribute(“StudentVO”,studentVO) // 생략가능
}

/* view.jsp */
${studentVO.name}
${studentVO.age}

혹은

/* Controller.class */
public void test(@ModelAttribute(“test”) StudentVO studentVO){ 
model.addAttribute(“StudentVO”,studentVO) // 생략가능
}

/* view.jsp */
${test.name}
${test.age}

@RequestParam

@RequestParam(value=”파라미터name” defaultValue=”디폴트값”, required=”필수인지true/false” )
  • HttpServletRequest.getParameter()처럼 HTTP요청의 파라미터 값을 가져올 수 있음
  • 요청 데이터와 Controller의 파라미터를 1:1 매핑
  • 숫자의 경우 파라미터가 존재하지 않을 시, default로 0이 전달됨

@ModelAttribute와 @RequestParam

  • @RequestParam은 setter로 값을 넣고 model.addAttribute로 객체를 추가하지만, @ModelAttribute는 이를 자동적으로 수행해줌. 즉, setter와 model.addAttribute가 없어도 됨
  • 두 어노테이션 모두 생략 가능
  • @RequestParam은 변수 기본형, @ModelAttribute는 기본형 외 객체 등을 다룰 때 사용
// @RequestParam
public void test ( @RequestParam(“name”)String name, @RequestParam(“no”)int no ) { … }
// @ModelAttribute
public void test ( @ModelAttribute StudentVO studentVO ) { … }

@RequestBody

  • JSON형태의 HTTP요청 본문(body)를 JAVA 오브젝트로 변환
  • Body가 존재하지 않는 GET메서드에 사용 시, setter가 필요
  • POST메서드는 setter는 필요하지 않으나 생성자는 필요

참고
https://hongku.tistory.com/123
https://parkadd.tistory.com/70
https://jojoldu.tistory.com/407

0개의 댓글