memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.tistory.com/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형

예제를 위해 간단한 Spring Boot 프로젝트를 생성한다.

2020/02/18 - [Spring/Spring Boot] - Spring Boot 프로젝트 생성하기

 

Spring Boot 프로젝트 생성하기

스프링 부트 프로젝트 생성 스프링 부트 프로젝트를 생성 할 수 있게 도와주는 사이트가 있다. (https://start.spring.io) 위와 같이 원하는 Version , Metadata , Dependency 를 정하여 프로젝트를 구성한다. Ge..

memostack.tistory.com

Controller 생성

Controller를 하나 생성한다. 생성할때는 @RestController를 이용한다.

@RestController // REST API Controller 사용한다는 것을 프레임워크에 알려줌
@RequestMapping("api") // localhost:8080/api 형태로 매핑 됨
public class GetController {

}

@RestController를 붙여줘야, Spring Framework는 이 클래스가 Controller라는 것을 알 수 있다.

클래스 위에 @RequestMapping("api")를 입력하면, http://[ip]:[port]/api 와 같이 url이 매핑된다.

 

@RequestMapping

간단하게 화면에 문자열을 출력하는 API를 만들면, 아래와 같이 만들 수 있다.

@RestController
@RequestMapping("api")
public class GetController {

  // GET Method 로 통신
  // 경로는 api/getMethod 와 매핑됨
  @RequestMapping(method = RequestMethod.GET, path = "/getMethod")
  public String getRequest() {
    return "Hello Spring";
  }

}

@RequestMapping 안에 method 값으로 RequestMethod.GET을 넣어주면, HTTP GET 요청이 왔을때 동작을 한다.

그리고, path 값을 URL에 매핑한다. (위에서는 /api/getMethod와 매핑됨)

 

브라우저를 통해 확인해보면, (http://localhost:8080/api/getMethod)

아래와 같이 화면에 Hello Spring 이 나타난다.

@RequestMapping

 

@GetMapping

GET 요청 방식의 API를 만들때, @RequestMapping(method = RequestMethod.GET ...) 방식도 있지만, @GetMapping을 이용하는 방법도 있다. (개인적으로 @GetMapping을 더 많이 사용한다)

@RestController
@RequestMapping("api")
public class GetController {

  ...

  // GET Method 통신
  // 경로는 api/getParam과 매핑됨
  @GetMapping("/getParam")
  public String getParameter() {
    return "Hello Spring";
  }

}

단순히 @GetMapping 을 사용하면 @RequestMapping(method = RequestMethod.GET ...) 과 동일한 효과를 볼 수 있다.

 

 

@RequestParam

Parameter를 입력받는 API를 만드는 경우도 있는데, 그때는 @RequestParam을 사용한다.

@RestController
@RequestMapping("api")
public class GetController {

  ...

  @GetMapping("/getParam")
  public String getParameter(@RequestParam String id, @RequestParam(name = "password") String pwd) {
    return "ID: " + id + ", Password: " + pwd;
  }
}

위 코드와 같이 입력 받을 파라미터를 메소드의 인자값으로 넣어준다. 그리고, 그앞에 @RequestParam을 넣는다.

 

기본적으로 인자 변수명을 파라미터명으로 받는다.

하지만, @RequestParam(name="원하는 파라미터 명")을 이용하면, 파라미터명을 바꿀 수 있다.

  • @RequestParam String id: /api/getParam?id=블라블라
  • @RequestParam(name = "password") String pwd: /api/getParam?password=블라블라

 

@RquestParam

 

만약 파라미터가 많아진다면 VO 객체를 생성하여 받을 수도 있다.

 

우선 VO 객체를 생성한다.

 

SearchParamVO.java

public class SearchParamVO {

  private String username;
  private String email;
  private int page;

  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }

  public String getEmail() {
    return email;
  }

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

  public int getPage() {
    return page;
  }

  public void setPage(int page) {
    this.page = page;
  }

  @Override
  public String toString() {
    return "SearchParamVO{"
        + "username='"
        + username
        + '\''
        + ", email='"
        + email
        + '\''
        + ", page="
        + page
        + '}';
  }
}

 

생성한 VO 객체를 아래와 같이 인자값으로 넣어준다.

 

GetController.java

@RestController
@RequestMapping("api")
public class GetController {

  @GetMapping("/getMultiParam")
  public String getMultiParameter(SearchParamVO vo) { // Parameter가 여러개인 경우, VO 객체로 받을 수 도 있음.
    return vo.toString();
  }
}

VO 객체를 이용한 파라미터 처리

 

위에서는 계속 문자열을 반환했지만, 요즘 API는 대부분 JSON 형식을 사용한다.

아래는 JSON 형태로 반환하도록 수정한 코드이다.

 

@RestController
@RequestMapping("api")
public class GetController {

  ...
  
  // return 값을 vo 객체로 해주면, Jackson 라이브러리가 알아서 JSON 형태로 변환하여 응답해준다.
  @GetMapping("/returnJson")
  public SearchParamVO returnJson(SearchParamVO vo) {
    return vo; // {"username":"tester","email":"tester@google.com","page":1}
  }
}

 

@RestController를 이용하면, 내부적으로 Jackson 라이브러리에 의해 VO 객체를 JSON 형태로 변환하여 응답해준다.

만약 @RestController가 아닌 @Controller를 사용한다면, @ResponseBody를 추가해줘야 한다.

 

JSON 형태로 반환

 

관련 글

2020/11/11 - [Spring/Spring Boot] - SpringBoot와 @PostMapping, @RequestBody 예제

 

SpringBoot와 @PostMapping, @RequestBody

@PostMapping POST 통신을 할때는 @RequestMapping(method=RequestMethod.POST, ...) 를 이용하거나 @PostMapping을 이용한다. @RestController @RequestMapping("api") public class PostController { @RequestMa..

memostack.tistory.com

 

반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.tistory.com/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!