정구리의 우주정복

[Kotlin] 공통 Response 정의하기 본문

JAVA/STUDY

[Kotlin] 공통 Response 정의하기

Jungry_ 2025. 3. 11. 11:08
반응형

 

프로젝트를 하다보면 Response 가 제각각이라 이녀석이 성공인지 실패인지 어떤 상태인지 표현하기가 어렵다

그래서 오늘은 공통 Response 를 정의해서 Http status 값과 ,message 그리고 Data 를 넣어보려 한다

 

어렵지 않음 !!!

"기존 Response 를 한번 더 감싸준다"
라고 생각하면 쉽다

 

data class BaseResponse<T>(
    val status: HttpStatus,
    val message: String,
    val data: T? = null
)

 

나는 status , message, data 를 넣었지만 

 

자기한테 필요한 형태로 커스텀 해서 사용 가능하다 

 

만약 기존에 ResponseEntity<UserResponse> 이렇게 사용했다면

 

ResponseEntity<BaseResponse<UserResponse>> 

이렇게 정의해주면 된다 

 

사용예시) 

package com.example.toygry.routinmoa.user.adapter.`in`

import com.example.toygry.routinmoa.commom.utils.BaseResponse
import com.example.toygry.routinmoa.user.application.port.`in`.UserUseCase
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.*
import java.time.LocalDateTime

@RestController
@RequestMapping("/user")
class UserController(
    val userUseCase: UserUseCase
) {

    @GetMapping("/{id}")
    fun getUser(@PathVariable id: Long): ResponseEntity<BaseResponse<UserResponse>> {
        val user = userUseCase.getUser(id)
        val userResponse = UserResponse(user.id, user.email, user.name, user.level, user.points, user.createdAt, user.lastPoint)
        return ResponseEntity.ok(BaseResponse(HttpStatus.OK, "사용자 조회 성공", userResponse))
    }

    @PostMapping("/{id}/point")
    fun dailyPoint(@PathVariable id: Long): ResponseEntity<BaseResponse<String>> {
        val userPoint = userUseCase.dailyPoint(id)
        return ResponseEntity.ok(BaseResponse(HttpStatus.OK,"포인트 증가 완료", userPoint))

    }

}

data class UserResponse(val id:Long, val email: String, val name: String, val level:Int, val points:Int, val createdAt: LocalDateTime, val lastPoint: LocalDateTime)

 

어렵지 않다 ! 

{
    "status": "OK",
    "message": "사용자 조회 성공",
    "data": {
        "id": 3,
        "email": "jungry0310@gmail.com",
        "name": "zzangry",
        "level": 2,
        "points": 80,
        "createdAt": "2025-01-30T12:07:42.005573",
        "lastPoint": "2025-03-11T10:03:35.766335"
    }
}

 

 

반응형
Comments