RESTful 웹서비스 생성하기

스프링 mvc에 대해서 전혀 모른다면 아래 주소로 이동하는 것을 추천한다.


스프링 웹은 RESTful 웹서비스를 생성하기 위한 몇 가지 애노테이션을 제공한다.

  • @RestController
    • 간단하게 말하면 HTTP 요청을 처리하는 컨트롤러 빈으로 설정하는 것이다. 자세한 설명은 spring 명세를 참조하자.
    • @Controller 에서 앞에 Rest만 붙어있다. Controller 기능에 무엇인가가 추가가 된 것이다.
    • @Controller 에서는 응답을 JSON 형식으로 보내기 위해서는 각각의 메서드에 @ResponseBody 를 붙여야 했는데 @RestController를 사용하게 되면 기본으로 적용이 된다.
  • @RequestMapping
    • Controller 또는 Controller Method와 HTTP 요청 경로를 연결 해주는 것이라고 생각하면 된다.
    • Controller에 설정하게 되면 모든 Method에 적용이 되며 가장 앞의 path이다.
    • Controller Method에 설정하게 되면 해당 Method에 적용 된다.
    • 즉 Controller의 RequestMapping 값 + Controller Method의 RequestMapping 값 이 최종 경로가 된다.
    • 둘 중 하나만 있어도 되지만 최소한 하나는 있어야 한다. (물론 중복되면 안된다.)
  • @GetMapping (@PostMapping, @PutMapping, @DeleteMapping)
    • @GetMapping 은 기존 @RequestMapping(method=RequestMethod.GET) 과 같다.
    • @GetMapping("/index") == @RequestMapping("/index", method = RequestMethod.GET)
    • 원하는 요청 방식에 따라 Get, Pot .. 필요한대로 쓰면 된다.
  • @RequestParam
    • 요청 시 함께 보낸 Parameter의 값을 받을 수 있다. 
    • 3가지 설정이 존재한다. name, required, defaultValue
    • name : 요청 시 Parameter의 key값을 설정할 수 있다. 설정하지 않으면 변수의 이름을 key로 보내야 한다.
    • required : 필수 Parameter인지 설정할 수 있다. false 이면 요청 시 꼭 보내지 않아도 된다. 설정하지 않으면 true가 기본 값이다.
    • defaultValue : 요청 시 해당 Parameter를 받지 못했을 경우 기본 값으로 사용된다. 설정하지 않으면 required 가 false일 경우 빈값이다.
    • @GetMapping("/name")
      public String name(@RequestParam(name = "eman", defaultValue = "kkt", required = false) String name) {
      return name;
      }
    • 기본 자료형을 요청 Parameter로 보낼 때 많이 사용하며, 복잡한 형태의 JSON 데이터의 경우는 아래 설명할 @RequestBody를 사용한다.
  • @RequestBody
    • spring-boot-starter-web 을 통해 함께 추가 된 잭슨 라이브러리를 통해 JSON 형식의 요청 Parameter를 Object로 바인딩한다.
    • @PostMapping
      public User add(@RequestBody User user) {
      user.setName("김경태");
      users.add(user);
      return user;
      }
  • @PathVariable
    • 경로를 반드시 고정값으로 설정해야 하는 것은 아니다.
    • @GetMapping("/{id}") 처럼 설정을 하고 Method 파라미터 설정을 (@PathVariable String id) 로 설정을 하면 경로에 입력한 값이 id에 바인딩 된다.
    • @GetMapping("/{id}")
      public String findById(@PathVariable String id) {
      return id;
      }


위 요청 예제에는 아무런 의미가 없으니 형식만 보면 된다.



+ Recent posts