[Spring Boot] GetMapping 맛보기

허훈·2023년 12월 20일
0

spring-boot

목록 보기
1/6
post-thumbnail
@RestController
@RequestMapping("/api/get")
public class GetController { }

시작하기 앞서, 다음과 같이 Controller를 만들고 경로를 지정해주자.

@RestController : 해당 클래스는 REST API를 처리하는 Controller임을 선언
@RequestMapping : URL 지정


✅ 1. 기본 방식

/http://localhost:8080/api/get/hello
	@GetMapping(path = "/hello")
	public String getHello() {
    	return "Hello Spring!";
	}

화면에 Hello Spring! 이라는 문자열이 출력된다. 리턴값이 그대로 HTML Body에 전달된다.
참고로, @GetMapping에 "path = "는 생략하고 "/hello"만 작성해도 문제 없다.


✅ 2. PathVariable

// http://localhost:8080/api/get/path-variable/{name}
    @GetMapping("/path-variable/{name}")
    public String pathVariable(@PathVariable String name) {
        return name;
    }

Path Variable, 말 그대로 경로(url)에 변수를 사용하는 방법으로,
파라미터로 넣은 값 "John"이 그대로 name에 대입된다.
이 때, 메서드에서 파라미터를 받을 때 반드시 @PathVariable 어노테이션을 사용한다.


✅ 3-1. RequestParam

// http://localhost:8080/api/get/query-param?name=john&email=john@gmail.com
    @GetMapping("/query-param")
    public String queryParameter(@RequestParam String name, @RequestParam String email) {
        return name + ", " + email;
    }

Query String으로 넘어온 파라미터들을 메서드 파라미터에 대입하는 방법으로,
파라미터로 넘어온 값들은 메서드의 파라미터 타입에 따라 적절히 전환된다.
이 때, 메서드에서 파라미터를 받을 때 반드시 @RequestParam 어노테이션을 사용한다.

단, 이렇게 일일이 파라미터를 받게 되는 경우,
파라미터의 수가 많아지면 코드가 복잡해지며 가독성이 떨어지게 되는 단점이 있다.


✅ 3-2. RequestParam - Map

// http://localhost:8080/api/get/query-param?name=John&email=john@gmail.com
    @GetMapping("/query-param/map")
    public String queryParameterMap(@RequestParam Map<String, String> queryParam) {
        StringBuilder sb = new StringBuilder();
        queryParam.forEach((key, value) -> sb.append(key).append(": ").append(value).append("\n"));
        return sb.toString();
    }

위 예시에서는 name과 email 두 개의 파라미터를 Map 컬렉션으로 담았는데,
단, Map 컬렉션을 사용하는 경우 어떤 파라미터가 넘어오는지 명확하게 알 수 없는 단점이 있다.

StringBuilder나 forEach 등 기본 JAVA 문법은 굳이 설명하지 않겠다.


✅ 4. DTO 객체 사용

public class GetRequest {
    private String name;
    private String email;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return this.name + ", " + this.email;
    }
}
@GetMapping("/query-param/dto")
    public String queryParameterDTO(GetRequest userRequest) {
        return userRequest.toString();
    }

파라미터로 넘어온 값들을 SpringBoot에서 자동으로 키 이름에 맞는 DTO 객체의 멤버 변수에 대입해주는 방법이다. 이 때, DTO 클래스를 별개로 만들어주어야 하며, 반드시 getter와 setter를 생성해주어야 한다. 참고로, 메서드의 파라미터로 DTO를 사용하게 되면, @RequestParam 애노테이션을 붙일 필요가 없다.

HTML Body 부분에는 userRequest 객체의 toString 메서드에 지정해놓은 문자열 포맷대로 파라미터들이 출력된 것을 확인할 수 있다.

0개의 댓글

관련 채용 정보