정구리의 우주정복
[Kotlin] 공통 Response 정의하기 본문
반응형
프로젝트를 하다보면 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"
}
}
반응형
'JAVA > STUDY' 카테고리의 다른 글
[Kotlin] 구글 SMTP 연결 및 메일 전송 (2025.02.20 기준) (0) | 2025.02.20 |
---|---|
[Kotlin] findById().orElseThrow와 findById()의 차이 (Optional) (0) | 2025.02.18 |
[Kotlin] Dirty Checking (더티 체킹) (0) | 2025.02.02 |
[Spring] 커스텀 에러 정의, 공통화 , HttpStatus 보여주기 (BaseException 정의하기) (2) | 2024.06.22 |
[Spring] Exception, RuntimeException 상속에 대해 (Checked Exception, Unchecked Exception 이란 ?) (4) | 2024.06.10 |