(Spring Web MVC) 핸들러 메서드 – MethodArgument

@RequestParam

  • 서블릿 요청 매개변수(쿼리 매개변수 또는 양식 데이터)
    메서드의 매개변수(일반적으로 단일 요청 매개변수)에 바인딩할 때 사용되는 주석
  • 동작 원리
    • @RequestParam("petId") int idrequest.getParameter("username")
  • 쿼리 매개변수 이름이 변수 이름과 동일한 경우 @RequestParam(name="xx") 생략 가능
  • String , int , Integer 다음과 같은 간단한 유형의 경우 @RequestParam 생략도 가능하다
    • String그렇지 않으면 유형 변환이 자동으로 적용됩니다.
  • 매개변수 유형은 배열 또는 목록으로 선언될 수 있습니다.
  • required 옵션
    • 매개변수가 필요한지 여부를 결정합니다. (기본값 = 참)
    • required = false 또는 java.util.Optional 래퍼를 사용할 때
    • 매개변수가 없어도 예외가 발생하지 않습니다.
    • null 값은 기본 유형에 입력할 수 없으므로, defaultValue 또는 래퍼 클래스를 사용해야 합니다.
  • defaultValue 옵션
    • 매개변수에 값이 없을 때 defaultValue 기본값을 적용하는 데 사용할 수 있습니다.
    • 쿼리 매개변수가 빈 문자인 경우에도 적용됩니다.
    • 기본값이 있기 때문에 required 옵션은 중요하지 않습니다.
  • requestParamMap
    • 매개변수 Map, MultiValueMap로 볼 수 있습니다
    • 애노테이션에 매개변수 이름을 지정하지 않아도 Map에서 빼낼 수 있다.
    • 하나의 매개변수 값이 확실한 경우 Map그렇지 않으면 MultiValueMap 사용

@ModelAttribute

  • 서블릿 요청 매개변수(쿼리 매개변수 또는 양식 데이터)
    도메인 모델 또는 DTO와 같은 복잡한 개체에 바인딩할 때 사용되는 주석입니다.
  • 동작 원리
    • 객체 생성
    • 요청 매개변수의 이름으로 객체의 속성을 찾습니다. setter매개변수의 값을 입력하려면
  • 재산
    • 물체에 getA(), setA() 메서드가 있으면 객체 a라는 속성이 있습니다
    • a 재산가치가 변하는 경우 setA() 전화를 걸거나 문의할 때 getA() 부르다
  • 주석 생략 시 @ModelAttribute 적용
    • String , int , Integer 등의 단순형이나 인수 리졸버로 지정된 형은 제외
  • 바인딩 오류
    • 적절한 유형을 입력하지 않으면 BindException 세대
    • BindingResult에 오류를 저장


@요청 본문

  • 클라이언트에서 보낸 요청 본문 데이터
    메서드의 매개변수로 바인딩하는 데 사용되는 주석
  • HTTP 메시지 본문 정보의 편리한 조회
    • 헤더 정보가 필요한 경우 HttpEntity 또는 @RequestHeader 사용
  • 본문 데이터 요청 – Java 객체 변환
    • objectMapper다음을 통해 문자로 된 JSON 데이터 messageBody자바 객체로 변환
    • 객체 매개변수 : 자신의 개체 지정
      전) @RequestBody HelloData data
    • HttpEntity 사용
  • 주석은 생략할 수 없습니다.
    • 주석이 생략된 경우 @ModelAttribute 적용하다
      • HTTP 메시지 본문이 아닌 요청 매개변수 처리
  • 주의
    • HTTP 요청을 할 때, content-typeapplication/json만 가능
    • JSON을 처리할 수 있는 HTTP 메시지 변환기를 실행하기 때문입니다.