Rest API

Representational State Transfer의 약어로 하나의 URI는 하나의 고유한 리소스를 대표하여 설계된다는 개념의 전송방식으로 서버에서 화면으로 전송하는 순수한 데이터 처리방식입니다.

URI + GET/POST/PUT/DELETE


스프링의 REST 관련 @Annotation

  • @RestController : Controller가 REST 방식을 처리하기 위한 것을 명시
  • @ResponseBody : 일반적인 view(jsp,asp)로 전달되는 것이 아니라 데이터 자체를 전달하는 용도
  • @PathVariable : URL 경로에 있는 값을 파라미터로 사용할 때 사용
  • @CrossOrigin : Ajax의 크로스 도메인 문제를 해결
  • @RequestBody : JSON 데이터를 원하는 타입으로 Binding
  • @ResponseEntity : 데이터와 함께 HTTP header의 상태메세지를 함께 전달


@RestController 는 기존의 @Controller@ResponseBody 를 조합한 동일한 결과이며 이는 리턴 타입으로 사용자가 정의한 클래스 타입을 사용 할 수 있으며 동시에 JSON과 XML로 자동 데이터 처리를 할 수 있는 것을 의미합니다.


JSON 데이터 처리

  • JSON?
    • JavaScript Object Notation
    • 구조가 있는 데이터를 { } 로 묶어 keyvalue로 구성하는 data format

1. add pom.xml → jackson-databind 라이브러리

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
</dependency>   
   <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.9.8</version>
</dependency>

2. add pom.xml → Gson 라이브러리

1
2
3
4
5
</dependency>
  <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.2</version>
</dependency>

3. 그외 Servlet 버전 수정 및 Lombok 관련 설정, Test를 위한 Pom.xml 수정

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<dependency>
   <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-test</artifactId>
		<version>${org.springframework-version}</version>
</dependency>
<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.12</version>
		<scope>test</scope>
</dependency>


Reference