🎨
스프링 MVC
  • Initial page
  • 웹 애플리케이션 이해
    • 웹 서버, 웹 애플리케이션 서버
    • 서블릿
    • 동시 요청 - 멀티 쓰레드
    • HTML, HTTP API, CSR, SSR
    • 자바 백엔드 웹 기술 역사
  • 2. 서블릿
    • 프로젝트 생성
    • Hello 서블릿
    • HttpServletRequest - 개요
    • HttpServletRequest - 기본 사용법
    • HTTP 요청 데이터 - 개요
    • HTTP 요청 데이터 - GET 쿼리 파라미터
    • HTTP 요청 데이터 - POST HTML Form
    • HTTP 요청 데이터 - API 메시지 바디 - 단순 텍스트
    • HTTP 요청 데이터 - API 메시지 바디 - JSON
    • HttpServletResponse - 기본 사용법
    • HTTP 응답 데이터 - 단순 텍스트, HTML
    • HTTP 응답 데이터 - API JSON
    • Summary
  • 3. 서블릿, JSP, MVC 패턴
    • 회원관리 웹 애플리케이션 요구사항
    • 서블릿으로 회원 관리 웹 애플리케이션 만들기
    • NoClassDefFoundError(WebServlet) TroubleShooting
    • NumberFormatException TroubleShooting
    • HTML에서 한글이 보이지 않는 이슈 TroubleShooting
    • JSP로 회원 관리 웹 애플리케이션 만들기
    • MVC 패턴 - 개요
    • MVC 패턴 - 적용
    • MVC 패턴 - 한계
    • Summary
  • 4. MVC 프레임워크 만들기
    • 프론트 컨트롤러 패턴 소개
    • 프론트 컨트롤러 도입 - v1
    • View 분리 - v2
    • Model 분리 - v3
    • 단순하고 실용적인 컨트롤러 - v4
    • ⭐️유연한 컨트롤러1 - v5(어댑터 도입, 인터페이스3 처리)
    • ⭐️유연한 컨트롤러2 - v5(어댑터 도입, 인터페이스3,4 처리)
    • Summary
  • 5. 스프링 MVC - 구조 이해
    • ⭐️스프링 MVC 전체 구조
    • 핸들러 매핑과 핸들러 어댑터
    • 뷰 리졸버
    • 스프링 MVC - 시작하기
    • @Controller 등장!⭐️
    • 스프링 MVC - 컨트롤러 통합
    • 스프링 MVC - 실용적인 방식
    • Summary
  • 6. 스프링 MVC - 기본 기능
    • 프로젝트 생성
    • 로딩 간단히 알아보기
    • 요청 매핑
    • 요청 매핑 - API 예시
    • HTTP 요청 - 기본, 헤더 조회
    • HTTP 요청 파라미터 - 쿼리 파라미터, HTML, Form
    • HTTP 요청 파라미터 - @RequestParam
    • HTTP 요청 파라미터 - @ModelAttribute
    • HTTP 요청 메시지 - 단순 텍스트
    • HTTP 요청 메시지 - JSON
    • 응답 - 정적 리소스, 뷰 템플릿
    • HTTP 응답 - HTTP API, 메시지 바디에 직접 입력
    • HTTP 메시지 컨버터
    • 요청 매핑 핸들러 어댑터 구조
    • Summary
  • 7. 스프링 MVC - 웹 페이지 만들기
    • 프로젝트 생성
    • 요구사항 분석
    • 상품 도메인 개발
    • 상품 서비스 HTML
    • 상품 목록 - 타임리프
    • 상품 상세
    • 상품 등록 폼
    • 상품 등록 처리 - @ModelAttribute
    • 상품 수정
    • PRG Post/Redirect/Get
    • RedirectAttributes
    • Summary
  • What's Next?
Powered by GitBook
On this page

Was this helpful?

  1. 6. 스프링 MVC - 기본 기능

HTTP 요청 파라미터 - @ModelAttribute

@ModelAttribute는 요청 정보를 객체로 변환해줄 뿐만 아니라, 이 객체를 Model에 넣어줄 수도 있다! @ModelAttribute("name") : "name"이라는 이름으로 객체를 Model에 넣는다! name을 생략가능한데 이 때는 클래스명의 첫 글자를 소문자로 바꾼 것을 이름으로 Model에 넣는다! @ModelAttribute 자체도 생략가능. 주의 요망! primitive type, argument resolver 이외의 것을 생략하면(객체라고 생각하면 편함) 메시지 바디가 아니라 요청 파라미터를 처리한다! 메시지 바디의 데이터(API)를 조회, 처리하고 싶으면 명시해주어야한다! 그리고 요청 파라미터인 경우에도 명시해주는 것이 좋다!

실제 개발을 하면 요청 파라미터를 받아서 필요한 객체를 만들고 그 객체에 값을 넣어주어야 한다. 보통 다음과 같이 코드를 작성할 것이다.

@RequestParam String username;
  @RequestParam int age;
  HelloData data = new HelloData();
  data.setUsername(username);
  data.setAge(age);

=>스프링은 이 과정을 완전히 자동화해주는 @ModelAttribute 기능을 제공한다.

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

스프링MVC는 @ModelAttribute 가 있으면 다음을 실행한다.

  1. HelloData 객체를 생성한다.

  2. 요청 파라미터의 이름으로 HelloData 객체의 프로퍼티를 찾는다. 그리고 해당 프로퍼티의 setter를 호출해서 파라미터의 값을 입력(바인딩) 한다. ex) 예) 파라미터 이름이 username 이면 setUsername() 메서드를 찾아서 호출하면서 값을 입력한다.

  • 프로퍼티

getXXX, setXXX 과 같은 것들이 프로퍼티이다. ex) 객체에 getUsername() , setUsername() 메서드가 있으면, 이 객체는 username 이라는 프로퍼티를 가지고 있다.

  • 바인딩 오류

    age=abc 처럼 숫자가 들어가야 할 곳에 문자를 넣으면 BindException 이 발생한다. 이런 바인딩 오류를 처리하는 방법은 검증 부분에서 다룬다.

@RequestParam과 마찬가지로 @ModelAttribute 도 애노테이션을 생략할 수 있다. 스프링은 해당 생략시 다음과 같은 규칙을 적용한다.

  1. String , int , Integer 같은 단순 타입 = @RequestParam

  2. 나머지 = @ModelAttribute (argument resolver 로 지정해둔 타입 외)

PreviousHTTP 요청 파라미터 - @RequestParamNextHTTP 요청 메시지 - 단순 텍스트

Last updated 3 years ago

Was this helpful?