-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
questionFurther information is requestedFurther information is requested
Description
질문 최하단의 3가지 Response 들에 대한 질문입니다! 질문 폭탄 미리 죄송합니다...ㅎㅎ
1. Response 클래스를 3개로 나눠 놓은 이유가 궁금합니다.
- 3개 클래스 모두 필드가 유사하여 1개의 Response 클래스로도 원하는 작업이 가능하지 않았을까 하여, 나눠놓은 이유가 궁금했습니다.
- 아래 예시로 만들어봤습니다. (ApiResponse) 이해를 돕기 위함이기 때문에 오류가 있을 수 있습니다.
- result가 null 일 땐 응답 JSON 객체에 필드를 제외하도록 @JsonInclude 사용했습니다.
- ErrorCode만 Enum으로 처리하는 것이 아닌, 정상 코드도 Enum에 포함하면 원하는 작업이 가능하지 않을까 생각해봤습니다. (아래 코드에는 반영 안되어있습니다. )
@Getter
@JsonPropertyOrder({"isSuccess", "code", "message", "result"})
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ApiResponse<T> {
private final boolean isSuccess;
private final String message;
private final int code;
private final T result;
private ApiResponse(boolean isSuccess, String message, int code, T result) {
this.isSuccess = isSuccess;
this.message = message;
this.code = code;
this.result = result;
}
public static <T> ApiResponse<T> success(T result) {
return new ApiResponse<>(true, "요청성공.", 1000, result);
}
public static ApiResponse<Void> success() {
return new ApiResponse<>(true, "요청성공.", 1000, null);
}
public static ApiResponse<Void> error(int code, String message) {
return new ApiResponse<>(false, message, code, null);
}
} 2. SuccessDataResponse에서 빌더 패턴을 사용한 이유가 궁금합니다.
- 아래처럼 SuccessResponse와 동일하게 create() 함수를 작성해도 되지 않나요? 빌더 패턴을 사용해야 되는 이유가 궁금합니다.
public static <T> SuccessDataResponse<T> create(T result) {
return new SuccessDataResponse<>(result);
}3. 기타 질문
- isSuccess 필드가 Boolean 일 필요가 있을까요? null이 들어갈 상황이 없을 것 같아서, 명확성을 위해 boolean이 낫지 않을까 생각했습니다.
- @NoArgsConstructor 를 붙인 이유가 있을까요? 해당 어노테이션이 수행하는 역할이 없는 것 같아서요.
- result 필드만 final이 아닌 이유가 있을까요?
@Getter
@NoArgsConstructor
@JsonPropertyOrder({"isSuccess", "code", "message"})
public class SuccessResponse {
private final Boolean isSuccess = true;
@Schema(defaultValue = "요청성공.")
private final String message = "요청성공.";
@Schema(defaultValue = "1000")
private final int code = 1000;
public static SuccessResponse create() {
return new SuccessResponse();
}
}@Getter
@NoArgsConstructor
@JsonPropertyOrder({"isSuccess", "code", "message", "result"})
public class SuccessDataResponse<T> extends SuccessResponse {
private T result;
@Builder(access = AccessLevel.PRIVATE)
public SuccessDataResponse(T result) {
this.result = result;
}
public static <T> SuccessDataResponse<T> create(T result) {
return SuccessDataResponse.<T>builder()
.result(result)
.build();
}
}@Getter
@NoArgsConstructor
@JsonPropertyOrder({"isSuccess", "code", "message"})
public class ErrorResponse {
private Boolean isSuccess;
private int code;
private String message;
@Builder
public ErrorResponse(int code, String message) {
this.isSuccess = false;
this.code = code;
this.message = message;
}
@Builder(builderClassName = "customBuilder", builderMethodName = "customBuilder")
public ErrorResponse(ErrorCode errorCode) {
this.isSuccess = false;
this.code = errorCode.getCode();
this.message = errorCode.getMessage();
}
}Metadata
Metadata
Assignees
Labels
questionFurther information is requestedFurther information is requested