Spring REST API로 CRUD 구현하기

Lucy·2022년 12월 22일
0

Spring

목록 보기
3/3

Spring Rest API

Spring 3.0의 @ResponseBody, 그리고 4.0부터 지원되는 @RestController를 통해 Rest API 메소드를 지원할 수 있게 되었다.

  • @ResponseBody : html을 JSON 형태로 보여주는 역할

    • Method 앞에 사용하는 annotation
  • @RestController = @ResponseBody + @Controller

    • Class 앞에 사용하는 annotation
    • 해당 Class 내의 모든 Method는 자동으로 @ResponseBody가 적용됨

Spring에서는 class나 method 앞에 간단한 annotation(@~)을 통해 각 class나 method가 어떤 역할을 해주는지 자동으로 정해준다.

마찬가지로 REST Controller에 대해서도 Annotation을 활용할 수 있는데 그 방법은 크게 두 가지가 있다.

I. 필요한 Controller Class 앞에 @RestController를 붙여주거나,

II. 필요한 Controller Class 앞에 @Controller를 붙여주고, 해당 Class 내의 필요한 Method 앞에는 @RequestBody를 붙여줄 수 있다.

CRUD와 REST API

CRUD
= Create + Read + Update + Delete

  1. Read

    • @GetMapping("/api/~")
  2. Create

    • @PostMapping("/api/~")
  3. Update

    • @PutMapping("/api/~")
      : 자원의 전체 교체

    • @PatchMapping("/api/~")
      : 자원의 부분 교체

        - Spring 3.2부터 지원
  4. Delete

    • @DeleteMapping("/api/~")
  5. 1~4의 다른 방식

    • @RequestMapping(value = "/api/~", method = RequestMethod.GET/POST... )

Endpoint 설정

위의 annotation 예시에서 공통적인 ("/api/~") 부분은 서버 상 해당 주소에 REST EndPoint를 만들어 준다.

-  (server baseURL)/api/~

PathVariable

만약 Endpoint 설정에 있어 그 주소를 다음과 같이 주게 되면 URI 경로의 일부를 parameter로 사용하는 PathVariable을 설정할 수 있다.

@RequestMapping("/api/{id}")
public String ex(@PathVariable String id) {
	...
}

Query Parameter

Query parameter를 주고 싶다면 다음과 같이 method를 작성할 수 있다.

@RequestMapping("/api/~")
public String ex(@RequestParam(required=false) String id) {
	...
}
  • required에 대한 default 설정 값은 true이다.

RequestBody

JSON 데이터를 원하는 타입의 객체(여기서는 HashMap으로 변환해야 하는 경우 사용할 수 있다.

즉, @RequestBody는 HTTP 요청의 body를 Java 객체로 받을 수 있게 해준다.

@RequestMapping("/api/~")
public String ex(@RequestBody(required=false) HashMap<String, Object> data) {
	...
}
  • required에 대한 default 설정 값은 true이다.

  • 간혹 구글링을 하다보면 @RequestBody는 @GetMapping과 함께 사용하지 못한다고 나와 있는 경우가 많은데, 이와 상관없이 Get, Post 등 모든 REST API와 사용 가능하다.

  • 다만 client 측에서 request body를 전달할 수 없는 경우가 있기 때문에 RequestParameter로 대체하는 것으로 결정하는 경우가 많다.


Ref

https://rebeccacho.gitbooks.io/spring-study-group/content/chapter16.html

profile
나아가는 OnlyOne 개발자

0개의 댓글