본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : HTTP 요청 파라미터 - @ModelAttribute

by 오주현 2022. 1. 25.
반응형

실제 개발을 할 떄 요청 파라미터를 받아 객체를 만들고 값을 넣어줘야 하는데 이 과정에서 스프링이 자동화로 지원해주는 기능이 있다. 이 기능에 대해서 알아본다.

import lombok.Data;

@Data
public class HelloData {
    private String username;
    private int age;
}

먼저 요청 파라미터를 바인딩 받을 객체를 만들었다.

lombok 라이브러리를 통해 @Data 어노테이션을 사용했다.

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

이렇게 @ModelAttribute를 통해 사용하면 위에서 만든 HelloData 객체가 생성이 되고 요청 파라미터의 이름으로 HelloData 객체의 프로퍼티를 찾는다 그리고 그 프로퍼티의 setter를 호출해 파라미터의 값을 입력(바인딩)한다.

강의 자료에 따르면 예시로 파라미터 이름이 username이면 setUsername() 메서드를 찾아서 호출하면서 값을 입력한다고 한다.

객체에 getUsername(), setUsername() 메서드가 있다면 이 객체는 username라는 프로퍼티를 가지고 있는데 username의 프로퍼티의 값을 변경하면 setUsername(), 조회하면 getUsername()이 호출되는 것이다.

@ResponseBody
@RequestMapping("/model-attribute-v2")
public String modelAttributeV2(HelloData helloData) {
 log.info("username={}, age={}", helloData.getUsername(),
helloData.getAge());
 return "ok";
}

위 코드를 조금 더 간단하게 다듬으면 이렇게 된다. String, int, Integer 같은 단순 타입은 @RequestParam을 생략할 수 있고 나머지는 @ModelAttribute를 생략할 수 있다. 그 외에 argument resolver에 관련되어서도 있다고 하는데 아직 안 배웠다.


스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 참고하여 공부하였습니다.

반응형

댓글