스프링부트는 처음이라 #2 REST API : GET

highkim0914·2022년 3월 24일
0

HelloWorldController.java

@RestController
public class HelloWorldController {

    @GetMapping("")
    public String helloWorld(){
        return "Hello, world";
	}

}

위 코드는 localhost:8080 을 통해 자원을 가져오는 GET method를 이용하여 "Hello, world"를 반환한다.

@RestController?

@Controller
@ResponseBody
public @interface RestController {
	...
}

@Controller와 @ResponseBody 어노테이션을 합친 어노테이션

@GetMapping

@RequestMapping(method = RequestMethod.GET)
public @interface GetMapping {
	...
}

@RequestMapping의 method를 GET으로 설정한 어노테이션
REST의 method별로 하나씩 있다. (@PostMapping, @PutMapping, @DeleteMapping... )


- REST API : GET

  • 자원을 얻는데 사용되는 메소드
  • Path variable 및 Query parameter 사용하여 데이터 전달

사용법

@RestController
// localhost:8080/get 으로 시작하는 요청을 Mapping
@RequestMapping(value = "/get")
public class GetController {

// @PathVariable 이용
    @GetMapping("/{name}")
    public String getByPathVariable(@PathVariable String name){
        return name;
    }

//@RequestParam 이용
    @GetMapping("/query-param")
    public String getByRequestParam(@RequestParam String name,
                                    @RequestParam String email,
                                    @RequestParam int id){
        return name + " " + email + " " + id;
    }

//(key,value) map 이용
    @GetMapping("/query-param-map")
    public String getByRequestParamUsingMap(@RequestParam Map<String,String> queryParamMap){
        queryParamMap.forEach((key, value) -> {
            System.out.println(key);
            System.out.println(value);
        });
        return "";
    }

// dto 객체 이용
    @GetMapping("/query-param-dto")
    public String getByRequestParamUsingDto(UserRequest userRequest){
        System.out.println(userRequest.toString());
        return userRequest.toString();
    }

}
  • 함수 인자의 이름과 request의 변수 이름이 다를 땐 @PathVariable 또는 @RequestParam의 value 속성을 활용하여 매핑 가능
//예시
    @GetMapping("/{requestVariable}")
    public String getByPathVariable(@PathVariable(value = "requestVariable") String name){
        ...
    }
    
    //query-param의 key 이름으로 value 설정
    @GetMapping("/query-param")
    public String getByRequestParam(@RequestParam(value = "name") String userName)
        ...
    }
  • dto 객체를 이용하는 경우
    @RequestParam를 쓰지 않는다.
    객체에 setter 메소드 구현 필요하며,
    query parameter의 key 이름과 객체 내 변수 이름 같게 해야한다.

  • 이건 뭐지?
    @ResponseBody
    @RequestMapping
    dto 객체 이용 시 @RequestParam 사용하지 않아도 mapping되는 과정
profile
공부 중입니다

0개의 댓글