[Spring Boot] 스프링 부트 Get메소드 컨트롤러 작성-2 (@GetMapping, @PathVariable, @RequestParam)

권경환·2023년 12월 25일

JAVA

목록 보기
2/13
post-thumbnail

오늘은 스프링부트 환경에서 HTTP 메소드별 컨트롤러를 작성해보며 정리해보도록 하겠습니다!

HTTP 메소드란?

클라이언트 서버요청응답 데이터를 전송하는 방식이며, 서버가 수행해야할 동작
지정해서 요청하는 방법입니다.
HTTP 메소드는 아래와 같은 종류로 구성되어 있습니다.
주로 사용되는 메소드는 GET, POST, PUT, DELETE, PATCH5가지 입니다.
아래 내용은 MDN DOCS에서 가져왔습니다.

  1. GET : 데이터 조회

  2. POST : 데이터 추가

  3. PUT : 데이터 대체, 해당 데이터가 없으면 생성

  4. DELETE : 데이터 삭제

  5. PATCH : 데이터 일부분 수정

  6. HEAD : GET과 동일(body 부분을 제외), 상태 줄과 헤더만 반환

  7. OPTIONS : 목적 리소스의 통신을 설정

  8. CONNECT : 목적 리소스로 식별되는 서버로의 터널을 설정

  9. TRACE : 목적 리소스의 경로를 따라 메시지 루프백 테스트

GET 메소드 작성

- @PathVariable을 활용한 GET 메소드 구현

  • 매개변수를 받을때 자주 사용되는 방법 중 하나로 URL 자체에 값을 담아 요청하는 방법입니다.
  1. @RequestMapping을 /api로 설정한 뒤 class안에 @RequestMapping을 명시하며 value 값에 매개변수를 받도록 중괄호를 사용하여 작성합니다.
    ex) "/get/{test}"

  2. 메소드의 매개변수와 값을 연결하기 위해 @PathVariable을 명시하며, @GetMapping 어노테이션과 @PathVariable변수의 이름을 동일하게 작성합니다.

  3. 최종 URL에 매개변수를 설정하여 요청하면 아래와 같이 나옵니다.
    (최종 URL : localhost:8080/api/get/{매개변수 아무거나})

- 코드

@RestController
@RequestMapping("/api")
public class GetController {
    @GetMapping(value = "/get/{name}/{age}")
    public String getVariable(@PathVariable String name,
    						@PathVariable String age) {
        return "Name: " + name +", Age: " + age;
    }
}

- 응답값

  • 만일 @GetMapping 어노테이션에 지정한 변수의 이름과 매개변수의 이름을 동일하게 맞추기 어렵다면
    아래와 같이 구성하면 됩니다.
  1. @PathVariable 뒤 괄호를 열어 @GetMapping 어노테이션의 변수명을 지정합니다.
  2. @PathVariable에는 변수의 이름을 특정할 수 있는 value 요소가 존재하며 이 위치에 변수이름을 정의하면 매개변수와 매핑시킬 수 있습니다.

- 코드

@RestController
@RequestMapping("/api")
public class GetController {
    @GetMapping(value = "/get/{name}/{age}")
    public String getVariable(@PathVariable("name") String var1,
    @PathVariable("age") String var2) {
        return "Name: " + var1 +", Age: " + var2;
    }
}

- @RequestParam을 활용한 GET 메소드 구현

  • 쿼리형식으로 값을 전달하는 방식이며, URI에서 ?를 기준으로 우측에 key: value 형식으로 구성된 요청을 전송하는 방법입니다.
  1. @RequestParam 어노테이션 뒤에 변수명, required, defaultValue를 작성해줍니다.

    required를 False로 설정하면 파라미터가 존재하지 않을때 예외를 발생시키는데 이를 발생하지 않게 해줍니다.
    defaultValue는 파라미터가 존재하지않을때 명시된 기본값이 설정되게 해줍니다.

  2. URL에 쿼리를 설정하여 요청하면 아래와 같이 나옵니다.
    (최종 URL : http://localhost:8080/api/get?name=kwon&age=25)

- 코드

@RestController
@RequestMapping("/api")
public class GetController {
    @GetMapping(value = "/get")
    public String getVariable(@RequestParam String name,
    						@RequestParam String age) {
        return "Name: " + name +", Age: " + age;
    }
}

- 응답값

  • 만일 쿼리스트링에 파라미터 값이 여러개 있고 몇개가 들어올지 모른다면 Map 객체를 활용하여 다음과 같이 나타낼 수 있습니다.
  1. @RequestParamMap객체를 넣어줍니다.
  2. StringBuilder()을 value값에 넣고 param에 key 값 만큼 돌며 key와 value를 따로 뽑아낸 후 string으로 변환시켜줍니다.

- 코드

@RestController
@RequestMapping("/api")
public class GetController {
    @GetMapping(value = "/get")
    public String getVariable(@RequestParam Map<String, String> param) {
        StringBuilder value = new StringBuilder();

        param.entrySet().forEach(map -> {
            value.append(map.getKey() + " : " + map.getValue() + " ");
        });

        return value.toString();
    }
}

- 응답값

profile
성장을 좋아하는 주니어 개발자의 블로그

0개의 댓글