-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
레이어간 데이터 전달 형식 정의 #36
Comments
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
/**
* How to use
* 1. Make Controller's return type 'ResponseEntity<?>'
* 2. Use Response.makeResponse(HttpStatus, message, result)
*/
public class Response {
@Getter
@Builder
private static class Body {
private String message;
private Object result;
}
public static ResponseEntity<?> makeResponse(HttpStatus httpStatus, String message, Object result) {
Body body = Body.builder()
.message(message)
.result(result)
.build();
return new ResponseEntity<>(body, httpStatus);
}
public static ResponseEntity<?> makeResponse(HttpStatus httpStatus, String message) {
return makeResponse(httpStatus, message, null);
}
// 200
public static ResponseEntity<?> ok(String message) {
return makeResponse(HttpStatus.OK, message, null);
}
// 201
public static ResponseEntity<?> created(String message) {
return makeResponse(HttpStatus.CREATED, message, null);
}
// 400
public static ResponseEntity<?> badRequest(String message) {
return makeResponse(HttpStatus.BAD_REQUEST, message, null);
}
// 401
public static ResponseEntity<?> noContent(String message) {
return makeResponse(HttpStatus.NO_CONTENT, message, null);
}
// 404
public static ResponseEntity<?> notFound(String message) {
return makeResponse(HttpStatus.NOT_FOUND, message, null);
}
// 500
public static ResponseEntity<?> serverError(String message) {
return makeResponse(HttpStatus.INTERNAL_SERVER_ERROR, message, null);
}
} 위와 같은 Factory 클래스를 하나 만들어서 처리하는것도 하나의 방법이 될 수 있을 것 같습니다. |
const container = controller=> async (req, res) => {
const response = sendResponse(res);
try {
const result = await controller(req); // 각각의 controller를 reqeust body를 넣어서 실행하고 응답(RESULT)를 받아옴
response(result || fail.error.internalError({
errorMessage: '반환값이 명시되지 않았습니다.'
}));
} catch (e) {
if (config.NODE_ENV !== 'test') console.error(e)
if (e.status !== undefined) {
const httpCode = e.httpCode || 500;
return res.status(httpCode).json(e);
}
response(fail.error.internalError({
errorMessage: e.message || ''
}));
}
};;
|
@ParkJeongseop @minjun3021 @yunsuu 이건 모든 분들이 함께 고민해주세요 |
https://yeonyeon.tistory.com/218 이런식으로 @ExceptionHandler를 이용하여 try-catch를 사용하는게 아닌 정상적으로 비지니스 로직이 다 돌아갔을때는 Response 클래스 만들어놓은거 반환하면 좋을거 같습니다~ |
레퍼런스 또는 해당 패턴에 대한 키워드 같이 주시면 좋을 것 같습니다! |
참고로 해당 이슈는 바로 각 PR에 적용되는게 아니라, 요번주간 논의 후 향후 통합 작업때 적용하면 될 것 같습니다
|
참고
에러 핸들링, DTO 관련된 내용은 잘 모르겠네요 |
CustomResponse 클래스 구조 입니다. {
status: success or failed, // success: 성공, failed: 에러
message: empty or error message,
data: [] || null || data,
error_code: 0(success) or 사용자 정의 에러 코드 사용
errors: [] || null, (validation- error)
} |
좋습니다. API Response 고려사항으로는 사실 #40 도 있습니다.
HTTP 커스텀 에러 코드 관련 참고 일단 HTTP Response는 Validator 정의까지 일단 멈추고, 전체 레이어 Error Handling 방식 정의 해주시면 좋을 것 같습니다. |
Wiki에 HTTP Response에 대한 정리 해놨습니다.
그리고
|
Description
각 레이어간 데이터 형식 정의
Nodejs에서는(Not nestjs) 응답형식도 정해야했던 기억이 있습니다.
스프링부트에서도 동일한지는 모르겠으나, 각 레이어간, 또는 HTTP Response의 데이터 형식을 통일시켜야함을 분명할 것입니다. (Default가 존재함에도)
자료조사와 형식 정의를 부탁드립니다. (출처 남겨주십시요)
참고: PR
#28 (comment)
참고: Nodejs 경험
하나하나 다 자유로운 Nodejs(?)
Response.js
To do
그 외)
object
,list
,text
,int
에 대한 parsing 처리Test Checklist
The text was updated successfully, but these errors were encountered: