Home
Backend Engineering
Kotlin을 사용한 Spring Boot 개발기 - Controller (@requestBody, Dto 생성하기)
울이
울이
December 28, 2021
1 min

지난번에 GET과 관련된 내용들을 정리했었다. 이번에는 POST를 사용하면서 간단하게 정리를 해보려고한다.

SpringBoot Kotlin의 POST

마찬가지로 @RestController 어노테이션을 사용해서 만든 controller 내부에서 사용 하려고한다.

GET api들을 만들었던 컨트롤러에서 같이 작업했다. 많은 작업이 필요하기보다, requestBody를 사용 해 보는게 목적이기 때문에 간단히 만들어보자.

@RequestBody 어노테이션을 사용해서 Request된 Body의 데이터를 받아주자.

DTO 만들기

json 데이터를 받아주기 위해, json데이터가 생겨먹은(?) 형태로 데이터 클래스를 작성 해 놓자

DTO를 만들 때, 이전 Java를 사용한 Spring에서는 DTO위에 Lombok 어노테이션들을 늘어놓았던 것으로 기억한다

Image.png
Image.png

이런것들… 데이터를 가져오고 넣어주고, 각 데이터들을 문자열로 만들어주는 toString()이라던지 등등을 모두 포함한 어노테이션들을 늘어놓았던 것으로 기억한다

Kotlin에서는 위의 것을 사용 할 필요 없이, Kotlin Data Class를 선언 해 주기만 하면 자동적으로 생성 해준다

Image.png
Image.png

DTO를 생성하기 위해 package를 controller와 같은 형태로 만들어준다

아래처럼, 코틀린 클래스 앞에 data를 붙여주고 괄호를 유의해서 작성 해 준다

package com.example.linkwithbackend.dto

data class UserDto(
    val id: Long,
    val name: String,
    val email: String,
    val password: String
)

우선 테스트기때문에 어떤 정보가 들어갈지 모르겠지만, UserDto를 간단히 구성 해 봤다.

사실 db에 저장 할 것을 생각해서 id를 넣어주었지만, 실제로 유저가 POST 할 떄에는 id값이 들어가지 않을 것이다

Controller 만들기

전에 작성했던 GetMapping이 들어있는 컨트롤러에 작성했다.

@PostMapping()
    fun createUser(@RequestBody user:UserDto): String {
        println("#########################")
        println(user.email)
        println(user.name)
        println(user.password)
        println("#########################")
        /*
        회원 가입하는 로직을 만들 수 있을듯
         */
        return "Hello ${user.name}"
    }

@RequestBody 어노테이션으로 post body데이터를 바라 볼 수 있도록 만들었고, 데이터가 들어오는 형태는 우리가 아까 만들었던 UserDto 클래스의 형태로 만들었다.

아래처럼 요청을 해 보면

Image.png
Image.png

아래처럼 데이터가 잘 출력되는 것을 볼 수 있다

Image.png
Image.png

UserDto에 포함되어있는 데이터를 그대로 모두 다 주지 않아도 되고, 없는 데이터들을 끼워 넣어도 된다

다만, 우리의 똑똑한 @RequestBody 는 DTO내에 있는 데이터들만 들고 온다


Tags

#Spring#Java#Kotlin#Controller#dto#RequestBody
Previous Article
Docker를 사용한 Apache Flink와 Flink Job 올리기(1) - Docker Setting
울이

울이

개발자 울이

경험하고 사용하고 개선하는 것, 그리고 소통하면서 성장하는 것을 좋아합니다.

Expertise

Backend
Frontend
Data Engineering

Social Media

githublinkedinwebsiteinstagram

Related Posts

SpringBoot 에서 JPA를 사용한 Repository 테스트
June 17, 2022
1 min
© 2022, All Rights Reserved.

Quick Links

Home

Social Media