오봉이와 함께하는 개발 블로그
스프링 MVC 1 - HTTP 요청 파라미터 (@ModelAttribute) 본문
728x90
HTTP 요청 파라미터 - @ModelAttribute
실제 개발을 하면 요청 파라미터를 받아서 필요한 객체를 만들고 그 객체에 값을 넣어주어야 한다.
보통
다음과 같이 코드를 작성할 것이다.
@RequestParam String username;
@RequestParam int age;
HelloData data = new HelloData();
data.setUsername(username);
data.setAge(age);
스프링은 이 과정을 완전히 자동화해주는 @ModelAttribute기능을 제공한다.
HelloData
@Data
public class HelloData {
private String username;
private int age;
}
- @Data
- 롬복 어노테이션
- @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를
자동으로 적용해준다.
@ModelAttribute 적용 - modelAttributeV1
/**
* @ModelAttribute 사용
* 참고: model.addAttribute(helloData) 코드도 함께 자동 적용됨, 뒤에 model을 설명할 때
자세히 설명
*/
@ResponseBody
@RequestMapping("/model-attribute-v1")
public String modelAttributeV1(@ModelAttribute HelloData helloData) {
log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
return "ok";
}
HelloData 객체가 생성되고 요청 파라미터의 값도 모두 들어가 있다.
스프링 MVC는 @ModelAttribute가 있으면 다음을 실행한다.
- HelloData 객체를 생성
- 요청 파라미터의 이름으로 HelloData 객체의 프로퍼티를 찾는다.
- 해당 프로퍼티의 setter를 호출해서 파라미터의 값을 입력(바인딩)한다.
프로퍼티
객체에 getXXX(), setXXX() 메소드가 있으면 이 객체는 XXX라는 프로퍼티를 갖고 있다.
XXX의 값을 변경하면 setXXX()가 호출되고, 조회하면 getXXX()가 호출된다.
바인딩 오류
age=abc 처럼 숫자가 들어가야 할 곳에 문자를 넣으면 BindException 이 발생한다.
이런 바인딩 오류를 처리하는 방법은 검증 부분에서 다룬다.
@ModelAttribute 생략 - modelAttributeV2
/**
* @ModelAttribute 생략 가능
* String, int 같은 단순 타입 = @RequestParam
* argument resolver 로 지정해둔 타입 외 = @ModelAttribute
* */
@ResponseBody
@RequestMapping("/model-attribute-v2")
public String modelAttributeV2(HelloData helloData) {
log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
return "ok";
}
@ModelAttribute는 생략할 수 있다. 그런데 @RequestParam도 생략할 수 있으니 혼란이 발생할 수 있다.
스프링은 둘 다 생략할 때 다음 규칙을 적용한다.
- String, int, Integer같은 단순 타입 = @RequestParam
- 나머지 = @ModelAttribute(argument resolver로 지정해준 타입 외)
출처 : 인프런 김영한 지식 공유자님 강의 - 스프링 MVC 1편 백엔드 웹 개발 핵심 기술
728x90
'BE > Spring' 카테고리의 다른 글
스프링 MVC 1 - HTTP 요청 메시지(JSON) (0) | 2022.08.14 |
---|---|
스프링 MVC 1 - HTTP 요청 메시지(단순 텍스트) (0) | 2022.08.14 |
스프링 MVC 1 - HTTP 요청 파라미터(@RequestParam) (0) | 2022.08.13 |
스프링 MVC 1 - HTTP 요청 파라미터 (쿼리 파라미터, HTML Form) (0) | 2022.08.13 |
스프링 MVC 1 - HTTP 요청 기본, 헤더 조회 (0) | 2022.08.13 |
Comments