-
Spring Boot - @PathVariable & @RequestParam & @ModelAttributeFramework & Library/Spring Boot 2023. 2. 6. 13:27
@PathVariable & @RequestParm & @ModelAttribute
@PathVariable
http://localhost:8080/api/member/17
http://localhost:8080/api/member/25
REST API에서 위와 같이 URI에 변수가 들어가는 것을 본 적 있을 것이다. 위 URI에서 밑줄 친 부분이 @PathVariable 애너테이션으로 처리해 줄 수 있는 부분이다.
이처럼, URI에 파라미터를 포함시킨 요청을 @PathVariable 애너테이션을 사용하여 처리할 수 있다.
@RestController public class MemberController { @GetMapping("/member/{id}/{name}") public String findMember( @PathVariable String id, @PathVariable String name ) { return "Member ID : " + id + ", Member Name : " + name; } }
위 예제와 같이, 요청 URI의 파라미터에 해당하는 부분을 { } 안에 넣어 서버에 전달할 수 있다. 컨트롤러 메서드에서는 @PathVariable 애너테이션을 활용해 URI 중 어떤 파라미터를 가져올지 지정이 가능하다. 이때 { } 안에 들어간 파라미터명과 @PathVariable 변수명이 같아야 한다.
@RestController public class MemberController { @GetMapping("/member/{id}/{name}") public String findMember( @PathVariable("id") String memberId, @PathVariable("name") String memberName ) { return "Member ID : " + memberId + ", Member Name : " + memberName; } }
URI의 파라미터명과 @PathVariable 변수명을 다르게 하고 싶다면, 위와 같이 @PathVariable 애너테이션 안에 실제 파라미터명을 지정해 주면 된다.
@RequestParam
http:/localhost:8080/api/member?name=kim&age=25&address=seoul
@RequestParam 애너테이션은 key=value 형식으로 전달된 파라미터를 매핑하는 애너테이션이다. GET 방식으로 전달할 경우 URI 뒤에 ?key=value 형식으로 전달되고, POST 방식의 경우 Body를 통해 전달된다.
@RestController public class MemberController { @GetMapping("/member") public String findMember( @RequestParam(required = false) String name, @RequestParam(required = false) Integer age, @RequestParam(required = false) String address ) { return "Member Name : " + name + ", Member Age : " + age + ", Member Address" + address; } }
위 예제와 같이, URI의 key=value 형식이 @RequestParam 애너테이션으로 선언된 변수에 전달된다.
@ModelAttribute
@ModelAttribute 애너테이션은 key=value 형식으로 전달된 파라미터를 매핑하는 애너테이션이다. @RequestParam 애너테이션은 변수를 한 개씩 매핑하는 반면, @ModelAttribute 애너테이션은 사용자가 정의한 객체를 통해 한번에 받을 수 있다는 장점이 있다.
@Getter @Setter public class Member { private String name; private Integer age; private String address; }
매핑받을 객체를 작성할 때는 setter() 메서드와 getter 메서드를 필수로 만들어주어야 한다.
@RestController public class MemberController { @GetMapping("/member") public String findMember( @ModelAttribute Member member ) { return member; } }
위 예제와 같이 @ModelAttribute 애너테이션을 사용하면, 사용자가 정의한 클래스를 통해 한 번에 파라미터를 전달받을 수 있다. 또한, @ModelAttribute 애너테이션을 생략해도 동일하게 동작하는 것을 확인할 수 있다.
728x90'Framework & Library > Spring Boot' 카테고리의 다른 글
Spring Boot - Jackson 라이브러리를 이용한 데이터 바인딩(2) (0) 2023.02.10 Spring Boot - Jackson 라이브러리를 이용한 데이터 바인딩(1) (0) 2023.02.08 Spring Boot - DI(Dependency Injection)의 세 가지 방법 (0) 2023.02.05 Spring Boot - Service와 ServiceImpl 구조 (0) 2023.02.05 Spring Boot - DTO & VO & Entity (0) 2023.02.04