예제를 위해 간단한 Spring Boot 프로젝트를 생성한다.
2020/02/18 - [Spring/Spring Boot] - Spring Boot 프로젝트 생성하기
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
이 나타난다.
@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=블라블라
만약 파라미터가 많아진다면 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();
}
}
위에서는 계속 문자열을 반환했지만, 요즘 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
를 추가해줘야 한다.
관련 글
2020/11/11 - [Spring/Spring Boot] - SpringBoot와 @PostMapping, @RequestBody 예제
'Backend > Spring Boot' 카테고리의 다른 글
Spring Boot 와 MySQL & JPA 연동하기 (Gradle 프로젝트) (1) | 2020.11.11 |
---|---|
SpringBoot와 @PostMapping, @RequestBody 예제 (0) | 2020.11.11 |
Spring Boot 와 MySQL 연동하기 (Maven 프로젝트) (0) | 2020.10.31 |
Spring Boot 에서 JPA 사용하기 (MySQL 사용) (0) | 2020.10.31 |
Spring Boot, Maven 프로젝트에 롬복 적용하기 (0) | 2020.10.31 |