본문 바로가기
공부/web

[Spring] Http 요청 파라미터 Annotation

by 밍미 2019. 12. 20.
requestPrarameter

스터디 진행 중 백엔드 구현내용에 대해 코드리뷰를 진행하다가 컨트롤러단 설명중 어느분이 물어보셨다.

"왜 저 메소드에서 ModelAttribute 어노테이션을 쓰셨나요?"

나는 백엔드 파트가 아니었어서 듣기만 했지만 내심 궁금해졌다.

나도 그냥 쓰던대로 잡히는대로 썼던 것 같은데,

어노테이션 각각의 장단점을 정리를 해보아야겠다고 생각했다.

 

@PathVariable

URI상에 바인드되는 값을 파라미터 변수에 매핑시킨다.

타입에 맞지 않는 들어오게 되거나, 여러개의 파라미터를 전달받을 경우 순서가 바뀌지 않도록 유의해야 한다.

 

  • 옵션값

    • name: bind 하려고 하는 path variable의 이름
    • required: 필수값 지정 여부 (기본값은 true)
    • value: alias값

 

참고: http://zetcode.com/spring/pathvariable/

 

 

@RequestParam

@PathVariable과 파라미터의 사용법이 비슷하지만 @PathVariable은 URI 경로상에서 위치에 맞는 값을 가져오고, @RequestParam은 쿼리스트링의 키값에 맞는 값을 가져온다.

 

  • 옵션값

    • name: bind 하려고 하는 path variable의 이름
    • required: 필수값 지정 여부 (기본값은 true)
    • value: alias값
    • defaultValue: parameter 값이 없을 경우, 지정한 값으로 세팅

 

참고: https://www.baeldung.com/spring-request-param

 

 

@ModelAttribute

어노테이션으로 지정된 이름의 Object에 넘어온 값들을 바인딩해준다.

기존에 생성해둔 커맨드 객체에 하나하나 알아서 매핑을 해주는데,

어노테이션 선언 방식을 파라미터에 정의하느냐, 메소드에 정의하느냐에 따라 다르게 사용할 수 있다.

 

  • Argument에 정의

    • 어노테이션을 붙인 객체에 해당하는 값들을 1:1로 매핑시켜준다.
    • @ModelAttribute("item")과 같이 사용하면 매핑받는 변수의 이름을 클래스명과 일치시키지 않아도 바인드 할 수 있다.
  • Method에 정의

    • 요청 핸들러 메소드(@RequestMapping이 적용된 메서드)보다 먼저 호출된다.
    • 해당 메소드의 리턴값은 Model 객체에 담겨 전달된다.

 

참고 : https://www.baeldung.com/spring-mvc-and-the-modelattribute-annotation

 

 

@RequestBody

POST 방식의 메소드에서 폼 데이터를 자동으로 커맨드 객체에 바인드해준다.

JSON, XML 등의 데이터를 받고자하는 자바 타입 객체에 맞게 변환해준다.

@ModelAttribute와 달리 multipart데이터를 처리할 수 없다.

 

참고 : https://www.baeldung.com/spring-request-response-body

 

 

 

이 외에도 @CookieValue, @RequestHeader 등의 어노테이션이 있으나, 내가 사용해봤고 주로 사용되는 어노테이션이라고 생각되는 것 4가지만 정리해보았다.

댓글