아래와 같은 방식으로 구조화를 진행했습니다.
// 표준화한 ACCOUNT
{
"success": true
"code": 0,
"message": "성공하였습니다.",
"data": {
"accountId": 1,
"accountName": "frank"
},
}
[CommonResponse 설계]
/**
* @Class : CommonResponse
* @Description : enum으로 api 요청 결과에 대한 code, message를 정의
**/
@Getter
@AllArgsConstructor
public enum CommonResponse {
SUCCESS(0, "성공하였습니다."),
FAIL(-1, "실패하였습니다.");
private final int code;
private final String msg;
}
[단건, 리스트, 슬라이스,실패별 응답처리]
/**
* @Class : ResponseService
* @Description : 메인 도메인에 대한 서비스
**/
@Service
public class ResponseService {
/**
* @Method : getSingleResult
* @Description : 단일건 결과 처리
* @Parameter : [data]
* @Return : SingleResult<T>
**/
public <T> SingleResult<T> getSingleResult(T data) {
SingleResult<T> result = new SingleResult<>();
result.setData(data);
setSuccessResult(result);
return result;
}
/**
* @Method : getListResult
* @Description : 복수건 결과 처리
* @Parameter : [list]
* @Return : ListResult<T>
**/
public <T> ListResult<T> getListResult(List<T> list) {
ListResult<T> result = new ListResult<>();
result.setData(list);
setSuccessResult(result);
return result;
}
/**
* @Method : getSliceResult
* @Description : 페이징 결과 처리
* @Parameter : [list]
* @Return : SliceResult<T>
**/
public <T> SliceResult<T> getSliceResult(Slice<T> list) {
SliceResult<T> result = new SliceResult<>();
result.setData(list);
setSuccessResult(result);
return result;
}
/**
* @Method : getSuccessResult
* @Description : 성공 결과만 처리
* @Parameter : []
* @Return : CommonResult
**/
public CommonResult getSuccessResult() {
CommonResult result = new CommonResult();
setSuccessResult(result);
return result;
}
/**
* @Method : getFailResult
* @Description : 실패 처리
* @Parameter : [commonResponse]
* @Return : CommonResult
**/
public CommonResult getFailResult(CommonResponse commonResponse) {
CommonResult result = new CommonResult();
setFailResult(commonResponse, result);
return result;
}
/**
* @Method : setFailResult
* @Description : 실패 결과 바인딩
* @Parameter : [commonResponse, result]
* @Return : null
**/
private void setFailResult(CommonResponse commonResponse, CommonResult result) {
result.setSuccess(false);
result.setMsg(commonResponse.getMsg());
result.setCode(commonResponse.getCode());
}
/**
* @Method : setSuccessResult
* @Description : 결과에 api 요청 성공 데이터 세팅
* @Parameter : [result]
* @Return : null
**/
private void setSuccessResult(CommonResult result) {
result.setSuccess(true);
result.setCode(CommonResponse.SUCCESS.getCode());
result.setMsg(CommonResponse.SUCCESS.getMsg());
}
}
[CommonResult]
/**
* @Class : CommonResult
* @Description : 메인 도메인에 대한 결과 매핑
**/
@Data
public class CommonResult {
private boolean success;
private int code;
private String msg;
}
[ListResult]
/**
* @Class : ListResult
* @Description : 메인 도메인에 대한 리스트 결과값 매핑
**/
@Data
public class ListResult<T> extends CommonResult {
private List<T> data;
}
[SingleResult]
/**
* @Class : SingleResult
* @Description : 메인 도메인에 대한 단일 결과값 매핑
**/
@Data
public class SingleResult<T> extends CommonResult {
private T data;
}
[SliceResult]
/**
* @Class : SliceResult
* @Description : 메인 도메인에 대한 다중 결과값 매핑
**/
@Data
public class SliceResult<T> extends CommonResult {
private Slice<T> data;
}
'스프링 부트 > A-ger' 카테고리의 다른 글
[A-ger] @ExceptionAdvice로 에러 처리 (0) | 2022.03.02 |
---|---|
스프링 커버링 인덱스로 페이징 성능 개선하기 (0) | 2022.02.18 |
스프링 레디스 최근 검색어 관리하기 (0) | 2022.02.10 |
스프링 Redis로 캐시 처리하기 조회 수, 방문자 수 업데이트 (0) | 2022.02.08 |
스프링 무한스크롤 페이징 검색 처리 및 동적쿼리 적용하기 (0) | 2022.02.07 |
댓글