Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- pointcut
- jpa
- 스프링
- 인프런
- JDBC
- transaction
- 스프링 핵심 기능
- 스프링 핵심 원리
- Greedy
- JPQL
- db
- spring
- QueryDSL
- AOP
- SpringBoot
- Thymeleaf
- Spring Boot
- java
- 자바
- kotlin
- 알고리즘
- 그리디
- Exception
- Android
- http
- 김영한
- Servlet
- springdatajpa
- Proxy
- 백준
Archives
- Today
- Total
개발자되기 프로젝트
HTTP 요청 파라미터 - @ModelAttribute 본문
요청 파라미터를 받아서 객체를 만들고 그 객체에 값을 하나하나 넣어줘야 한다.
@ModelAttribute를 사용하면 바인딩을 편하게 할 수 있음.
1. Hello
@Data
public class HelloData {
private String username;
private int age;
}
2. @ModelAttribute 적용
- 적용 전
@ResponseBody
@RequestMapping("/model-attribute-v1")
public String modelAttributeV1(@RequestParam String username, @RequestParam int age){
Hello helloData = new Hello();
helloData.setUsername(username);
helloData.setAge(age);
log.info("username = {}, age= {}", helloData.getUsername(), helloData.getAge());
return "ok";
}
- 적용 후
- HelloData객체 생성, 파라미터 넣어주는 부분이 필요 없어진다..
- @ModelAttribute를 적용하면 객체 생성 및 파라미터 바인딩을 알아서 해줌..무친
@ResponseBody
@RequestMapping("/model-attribute-v1")
public String modelAttributeV1(@ModelAttribute HelloData helloData){
log.info("username = {}, age= {}", helloData.getUsername(), helloData.getAge());
return "ok";
}
- SpringMVC의 @ModelAttribute 실행 순서
- 위 예시 기준
- HelloData 객체를 생성
- 요청 파라미터의 이름으로 HelloData 객체의 프로퍼티를 찾는다.
- 그리고 해당 프로퍼티의 setter를 호출해서 파라미터의 값을 입력(바인딩) 한다.
- 예) 파라미터 이름이 username 이면 setUsername() 메서드를 찾아서 호출하면서 값을 입력한다.
- 바인딩 오류
- age=abc 처럼 숫자가 들어가야 할 곳에 문자를 넣으면 BindException 이 발생한다.
3. @ModelAttribute 생략 가능함
- @ModelAttribute 는 생략할 수 있음
- 그런데 @RequestParam 도 생략할 수 있는데?? 헷갈림..
@ResponseBody
@RequestMapping("/model-attribute-v2")
public String modelAttributeV2(HelloData helloData){
log.info("username = {}, age= {}", helloData.getUsername(), helloData.getAge());
return "ok";
}
- 스프링은 @RequestParam, @ModelAttribute 생략시 다음과 같은 규칙을 적용한다.
- String , int , Integer 같은 단순 타입 => @RequestParam
- 나머지 => @ModelAttribute (argument resolver 로 지정해둔 타입은 적용되지 않음.)
- 직접 만드는 객체는 @ModelAttribute생략시 적용됨.
4. GitHub : 210914 @ModelAttribute
'인프런 > [인프런] 스프링 MVC 1' 카테고리의 다른 글
HTTP 요청 메시지 - JSON (0) | 2021.09.14 |
---|---|
HTTP 요청 메시지 - 단순 텍스트 (0) | 2021.09.14 |
HTTP 요청 파라미터 - @RequestParam (0) | 2021.09.14 |
HTTP 요청 파라미터 - 쿼리 파라미터, HTML, Form (0) | 2021.09.14 |
HTTP 요청 - Header 조회 (0) | 2021.09.14 |
Comments