ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Boot - @PathVariable & @RequestParam & @ModelAttribute
    Framework & 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

    댓글

Designed by Tistory.