Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

HTTP 요청 파라미터 - @ModelAttribute 본문

인프런/[인프런] 스프링 MVC 1

HTTP 요청 파라미터 - @ModelAttribute

Seung__ 2021. 9. 14. 22:10

요청 파라미터를 받아서 객체를 만들고 그 객체에 값을 하나하나 넣어줘야 한다.

@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


 

GitHub - bsh6463/MVC2

Contribute to bsh6463/MVC2 development by creating an account on GitHub.

github.com

 

Comments