스프링MVC 어노테이션 - @ModelAttribute

G-NOTE·2021년 11월 19일
0

Spring

목록 보기
2/14

@ModelAttribute

  • 하는 일
    1. 객체를 생성한다.
    2. 요청 파라미터의 이름으로 객체의 프로퍼티를 찾는다.
    3. 해당 프로퍼티의 setter를 호출해서 파라미터의 값을 입력(바인딩)한다.

예제

import lombok.Data;

@Data
public class DataEx {
  private String name;
  private int age;
}

@ModelAttribyte 적용 전

@Controller
public class ModelAttriuteTest {

  @ResponseBody
  @RequestMapping("/model-Attribute-v1")
  public String modelAttributeV1(@RequestParam String name, @RequestParam int age) {
  
    DataEx dataEx = new DataEx();
    dataEx.setName(name);
    dataEx.setAge(age);
    
    log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
    return "ok";
  }

}

@ModelAttribyte 적용 후

@Controller
public class ModelAttriuteTest {

  @ResponseBody
  @RequestMapping("/model-Attribute-v1")
  public String modelAttributeV1(@ModelAttribute HelloData helloData) {
  
    log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
    return "ok";
  }

}

반복되는 데이터 적용하기

  • 반복되는 데이터를 계속 보여주어야 할 때 model.addAttribute(...)를 사용해서 계속 넣어야 한다.
  • 이때 @ModelAttribute를 사용하면 @ModelAttribute("regions")의 regions에서 반환한 값이 자동으로 모델에 담기게 되어 '컨트롤러를 호출할 때 해당 데이터가 항상 모델에 포함되는 것을 보장'해준다.

예제

    @ModelAttribute("regions")
    public Map<String, String> regions() {
        Map<String, String> regions = new LinkedHashMap<>(); 
        regions.put("SEOUL", "서울");
        regions.put("BUSAN", "부산");
        regions.put("JEJU", "제주");

        return regions;
    }

-> regions()가 포함된 컨트롤러를 호출하면 모델에 이 데이터가 항상 포함된다.

profile
FE Developer

0개의 댓글

관련 채용 정보