mysql 샘플 테이블 + 쿼리 연습 문제

http://java-school.net/jdbc/SQL-SELECT-Statement CREATE TABLE DEPT (     DEPTNO DECIMAL ( 2 ),     DNAME VARCHAR ( 14 ),     LOC VARCHAR ( 13 ),     CONSTRAINT PK_DEPT PRIMARY KEY ( DEPTNO ) ); CREATE TABLE EMP (     EMPNO DECIMAL ( 4 ),     ENAME VARCHAR ( 10 ),     JOB VARCHAR ( 9 ),     MGR DECIMAL ( 4 ),     HIREDATE DATE ,     SAL DECIMAL ( 7 , 2 ),     COMM DECIMAL ( 7 , 2 ),     DEPTNO DECIMAL ( 2 ),     CONSTRAINT PK_EMP PRIMARY KEY ( EMPNO ),     CONSTRAINT FK_DEPTNO FOREIGN KEY ( DEPTNO ) REFERENCES DEPT ( DEPTNO ) ); CREATE TABLE SALGRADE (     GRADE TINYINT ,     LOSAL SMALLINT ,     HISAL SMALLINT ); INSE...

Rest API 공통 Response 만들기 - kotlin

 

Rest API 에서 공통 응답을 만들어보쟈

Method : POST 

URL : {도메인}/api/v1/test 

호출했을 때


성공시

{
"resultCode": "0000",
"resultMessage": "OK"
}

실패시

{
"resultCode": "1000",
"resultMessage": "일시적인 오류"
}

동일한 포멧으로 Response를 주고 싶다


















ApiException
open class ApiException(
val errorCode: ErrorCode
) : RuntimeException()


APIExceptionHandler
@RestControllerAdvice
class ApiExceptionHandler {
companion object {
val log: Logger = LoggerFactory.getLogger(this::class.java)
}

@ExceptionHandler(value = [ApiException::class])
fun handleApiException(ex: ApiException): ResponseEntity<ErrorResponseDto> {
val errorCode: ErrorCode = ex.errorCode
val errorDto = ErrorResponseDto(resultCode = errorCode.code, resultMessage = errorCode.message)

log.error(ex.message)
return ResponseEntity(errorDto, errorCode.status)
}

@ExceptionHandler(value = [Exception::class])
fun handleServerException(ex: Exception): ResponseEntity<ErrorResponseDto> {
val errorCode: ErrorCode = ErrorCode.UNKNOWN_ERROR
val errorDto = ErrorResponseDto(resultCode = errorCode.code, resultMessage = errorCode.message)

log.error(ex.stackTraceToString())
return ResponseEntity(errorDto, errorCode.status)
}
}


ApiResponseDto
data class ApiResponseDto(
val resultCode: String = "0000",
val resultMessage: String = "OK",
) : ResponseDto


ErrorCode
enum class ErrorCode(val code: String, val status: HttpStatus, val message: String) {

// 5xx Server Error
UNKNOWN_ERROR("1000", HttpStatus.INTERNAL_SERVER_ERROR, "서버 내부 처리 중 에러 발생"),
}


ErrorResponseDto
data class ErrorResponseDto(
val resultCode: String,
val resultMessage: String?
) : ResponseDto


ResponseDto
interface ResponseDto {
}



TestService
@Service
class TestService(
private val testRepository: TestRepository,
private val cardRepository: UserRepository
) {

fun create(testRequest: TestRequestDto) : ResponseEntity<ResponseDto> {

        // user 확인
var user = userRepository.findByUserNumber(testRequest.userNumber)
.takeIf { it != null }
?: throw ApiException(ErrorCode.UNKNOWN_ERROR)
        // user 저장

return ResponseEntity(ApiResponseDto(), HttpStatus.OK)
}
}