본문 바로가기
Java

java - GET API

by sinabeuro 2021. 8. 26.
728x90

API 컨트롤러 시작하기

@RestController
@RequestMapping("/api/get")
public class GetApiController {
	...
}

컨트롤러 클래스위에 어노테이션 @RestController와 @RequestMapping를 붙여줍니다.

@RestController은 컨트롤러로 쓰겠다고 선언하것이고

@RequestMapping 클라이언트에서 보낼 URI를 기술하면 됩니다.

 

 

 

@RequestMapping vs @GetMapping

@RestController
@RequestMapping("/api/get")
public class GetApiController {

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

    @RequestMapping(path = "/hi", method = RequestMethod.GET)      // get http://localhost:9090/api/get/hi
    public String hi() {
        return "hi";
    }
}

예전에 api를 작성할 때는 @RequestMapping 어노테이션을 사용했습니다.

@RequestMapping를 사용하게 되면 get, post, put, delete 등 모든 타입을 받게 됩니다.

그래서 method 속성을 사용하여 타입을 지정해주었습니다.

하지만 Restful api를 명시적으로 작성하기 위해서 

@GetMapping, @PostMapping, @PutMapping, @DeleteMapping 등 타입에 맞는 어노테이션을 사용하는 것을 권장합니다. 

@GetMapping("") 안에 바로 URI를 적어주면 path로 인식합니다.

 

 

 

@PathVariable

URI에 가변 변수를 사용하고 싶을 때 사용하는 어노테이션입니다.

@GetMapping("/path-variable/{name}")
public String pathVariable(@PathVariable(name = "name") String pathName) {
	System.out.println("PathVariable : " + pathName);
	return pathName;
}

URI에 {가변 변수명}를 기술하고 @PathVariable name에 가변 변수명을 선택하고 사용하면 됩니다.

@PathVariable name에서 name 속성을 생략 시 받아오는 파라미터명을 같게 하면 됩니다. 

이 경우 파라미터 변수명을 바꾸고 싶은 경우에는 클라이언트에서 URI를 변경해야함으로 번거로울 수 있습니다.

그러므로 name 속성을 생략하지 않고 사용하는 것이 더 편리하고 명시적일 수 있습니다.

 

 

 

 

@RequestParam

URI에 파라미터를 queryString으로 보내는 경우 파라미터를 받을 때는 @RequestParam을 사용합니다.

 

Map으로 파라미터를 받는 경우

@GetMapping("/query-param01")
public String queryParam01(@RequestParam Map<String, String> queryParam) {
	StringBuilder sb = new StringBuilder();
  	queryParam.entrySet().forEach( entry -> {
      		sb.append(entry.getKey()+ " = " + entry.getValue()+ "\n");
  	});
	return sb.toString();
}

 

직접 데이터를 일일이 파라미터를 받는 경우

@GetMapping("/query-param02")
public String queryParam02(
	@RequestParam String name,
	@RequestParam String email,
	@RequestParam int age
) {
	return name+" "+email+" "+age;
}

이 경우 파라미터를 추가할 때마다 @RequestParam을 선언해야하므로 코드가 길어질 수가 있습니다. 

그렇다고 map으로 파라미터를 받는 경우 파라미터를 일일이 추출해서 사용해야할 경우에 불편할 수 있습니다.

그러므로 다음에 서술할 dto를 사용하여 파라미터를 받는 것을 권장합니다.

 

DTO를 사용하여 파라미터를 받는 경우

@GetMapping("/query-param03")
public String queryParam03(UserRequest userRequest, @RequestParam String name) {
	return userRequest.toString();
}

DTO 클래스를 만들어야하는 번거러움이 있지만, 한번 만들어 놓으면 코드의 재사용과 변경에 용이합니다.

DTO를 사용할 경우 @RequestParam을 기술하지 않아야합니다. 

또한 DTO와 @RequestParam로 파라미터를 받는 형식은 함께 사용할 수 있습니다.

728x90

'Java' 카테고리의 다른 글

java - PUT API  (0) 2021.08.26
java - POST API  (0) 2021.08.26
java - api 프로젝트 만들기  (0) 2021.08.25
java - 전략 패턴(행위 패턴)  (0) 2021.08.24
java - 파사드 패턴(구조 패턴)  (0) 2021.08.24

댓글