ABOUT ME

-

Total
-
  • JAVA: Spring Boot REST Api 서버 만들어보기
    컴퓨터/JAVA 2021. 1. 28. 23:21
    728x90
    반응형

    Spring Boot

    Spring 첫 사용기 TIL

    풀소스 링크 @Github

     

    Spring makes Java simple.

    Level up your Java code and explore what Spring can do for you.

    spring.io

     

    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

    댓글