-
JAVA: Spring Boot REST Api 서버 만들어보기컴퓨터/JAVA 2021. 1. 28. 23:21728x90반응형
Spring Boot
Spring 첫 사용기 TIL
풀소스 링크 @Github
1. Spring Boot 소개
Spring은 엔터프라이즈 레벨의 개발을 할 때 유용한, 다양한 도구를 제공해주는 프레임워크이다. (주로 configuration)
Spring Boot은 기본 Spring에서 수많은 구성들로 인해 개발을 시작하기도 전에 에러가 발생하는 상황을 해결할 수 있었다.
특징
- 구성들 추상화 허용 (미리 구성된 템플릿을 얻을 수 있음)
- 구성들이 숨겨졌지만 여전히 수정할 수 있음
2. 프로젝트 만들기
start.spring.io
위 사이트를 이용하면 쉽게 Spring Boot 모듈을 다운로드할 수 있다.
Maven을 기본 패키지 매니저로 사용하고, Java 버전 8, Spring Boot 버전 2.4.2를 사용할 것이다.
추가 패키지는 Spring Web을 추가(오른쪽)해서 RESTful API를 쉽게 만들 수 있게 도와준다.
GENERATE CODE 후 프로젝트를 열어준다. (아티팩트 = Main)
3. 간단한 서버 만들기
우선 rest api를 테스트하기 편하게 Postman을 설치한다. @다운로드 링크
endpoint들을 한 번에 정리하기 위해 MainApplication이 있는 곳에 RESTApi 컨트롤러 자바 파일을 만들어준다.
(New -> Java Class)
1. GET: server/home
/home에 들어가면, 간단한 welcome 메시지를 보여준다.
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class RESTApi { @GetMapping("/home") public String welcome(){ return "The server is running well."; } }
Postman으로 GET Send 테스트
아래 Body를 보면 "The server is running well." 메시지가 잘 나오는 것을 알 수 있다.
2. POST : server/kakao
json 형식 데이터를 /kakao 에 post 할 것이다.
json 데이터는 아래의 카카오 챗봇 반응을 사용
{ "intent": { "id": "g91we0mevnv54gejk1xbfznr", "name": "블록 이름" }, "userRequest": { "timezone": "Asia/Seoul", "params": { "ignoreMe": "true" }, "block": { "id": "g91we0mevnv54gejk1xbfznr", "name": "블록 이름" }, "utterance": "발화 내용123", "lang": null, "user": { "id": "439370", "type": "accountId", "properties": {} } }, "bot": { "id": "5fe45a6ddfbb1f5802d7381f", "name": "봇 이름" }, "action": { "name": "rhazb21gxo", "clientExtra": null, "params": {}, "id": "2n0esbxxgsr5r2c3pghqpzn9", "detailParams": {} } }
Postman에서 위를 Body에 복사해준다. (raw 설정 후 오른쪽 JSON으로 변경)
유저 발화문 print
JSON 파일 모델 클래스를 만들어서 할 수도 있지만,
카카오 챗봇 JSON 파일을 클래스화 시키는 건 꽤나 복잡해서 string을 java object로 바꿀 것이다. (fasterxml)
map에 request json을 읽기 -> userRequest에 map.get("userRequest")
Object로 받았기 때문에 Map으로 변환해주면 된다. utterance는 유저 발화 문이다.
카카오 챗봇 서버는 이런 식으로 만들면 될 것이다.
package csw.study.main; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.util.Map; @RestController public class RESTApi { @GetMapping("/home") public String welcome(){ return "The server is running well."; } @PostMapping("/kakao") public Object hello(@RequestBody String pBody) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); Map<String, Object> map = mapper.readValue(pBody, new TypeReference<Map<String,Object>>(){}); Map<String, Object> userRequest = ((Map<String, Object>) map.get("userRequest")); return userRequest.get("utterance"); } }
Postman POST
발화 내용123 잘 출력됨
3. POST: server/class
클래스로 JSON 모델을 만들어서 받는 법 (marshal)
아래의 JSON을 post 시킬 것이다. (단순 id, name, email)
{ "id": 2021, "name": "No name", "email": "Email" }
User Class
모든 getter/setter을 만들어 주어야 함
public class User { private int id; private String name; private String email; public int getID() { return id; } public void setID(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
end-point
@PostMapping("/class") public int addUser(@RequestBody User user) { return user.getID(); }
Postman
id가 잘 return 되었음
728x90'컴퓨터 > JAVA' 카테고리의 다른 글
Java: Z Garbage Collection (ZGC) (0) 2023.01.15 파이썬, 자바 Trie[트라이] 비교 (3) 2020.10.16 Java: Missing number in array (0) 2020.10.11