API Error 응답 구조체 설계
에러 응답 처리에 대한 공통 Object 규격을 갖고있어야겠다 생각하여 만들어봄.
ApiErrorDetail은 빌더패턴을 이용하여 생성이 가능하도록 구성..
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.http.HttpStatus;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
public class ApiError implements Serializable {
private static final long serialVersionUID = 4863574457052508120L;
private HttpStatus httpStatus;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss")
private LocalDateTime timestamp;
private String message;
private String returnUrl;
private List<ApiErrorDetail> errors = new ArrayList<ApiErrorDetail>();
public ApiError() {
super();
}
public ApiError(HttpStatus httpStatus) {
this.httpStatus = httpStatus;
}
public ApiError(HttpStatus httpStatus, Throwable e) {
this.httpStatus = httpStatus;
this.message = "Unknown Exception";
this.errors.add(new ApiErrorDetail.ApiErrorDetailBuilder().setExceptionName(e.getLocalizedMessage()).build());
}
public ApiError(HttpStatus httpStatus, List<ApiErrorDetail> errors) {
this.httpStatus = httpStatus;
this.errors = errors;
}
public ApiError(HttpStatus httpStatus, String message, Throwable e) {
this.httpStatus = httpStatus;
this.message = message;
this.errors.add(new ApiErrorDetail.ApiErrorDetailBuilder().setExceptionName(e.getLocalizedMessage()).build());
}
public ApiError(HttpStatus httpStatus, String message, List<ApiErrorDetail> errors) {
this.httpStatus = httpStatus;
this.message = message;
this.errors = errors;
}
public ApiError(HttpStatus httpStatus, String message, String returnUrl, Throwable e) {
this.httpStatus = httpStatus;
this.message = message;
this.returnUrl = returnUrl;
this.errors.add(new ApiErrorDetail.ApiErrorDetailBuilder().setExceptionName(e.getLocalizedMessage()).build());
}
public ApiError(HttpStatus httpStatus, String message, String returnUrl, List<ApiErrorDetail> errors) {
this.httpStatus = httpStatus;
this.message = message;
this.returnUrl = returnUrl;
this.errors = errors;
}
public HttpStatus getHttpStatus() {
return httpStatus;
}
public void setHttpStatus(HttpStatus httpStatus) {
this.httpStatus = httpStatus;
}
public LocalDateTime getTimestamp() {
return timestamp;
}
public void setTimestamp(LocalDateTime timestamp) {
this.timestamp = timestamp;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getReturnUrl() {
return returnUrl;
}
public void setReturnUrl(String returnUrl) {
this.returnUrl = returnUrl;
}
public List<ApiErrorDetail> getErrors() {
return errors;
}
public void setErrors(List<ApiErrorDetail> errors) {
this.errors = errors;
}
public void addErrors(ApiErrorDetail errors){
this.errors.add(errors);
}
}
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import java.io.Serializable;
@JsonIgnoreProperties(ignoreUnknown = true)
public class ApiErrorDetail implements Serializable {
private static final long serialVersionUID = 6991430857880276989L;
private String field;
private String code;
private String message;
private String exceptionName;
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getExceptionName() {
return exceptionName;
}
public void setExceptionName(String exceptionName) {
this.exceptionName = exceptionName;
}
public ApiErrorDetail() {
}
public ApiErrorDetail(ApiErrorDetailBuilder builder) {
this.field = builder.field;
this.code = builder.code;
this.message = builder.message;
this.exceptionName = builder.exceptionName;
}
public static class ApiErrorDetailBuilder {
private String field = "";
private String code = "";
private String message = "";
private String exceptionName = "";
public ApiErrorDetailBuilder() {
}
public ApiErrorDetailBuilder setField(String field) {
this.field = field;
return this;
}
public ApiErrorDetailBuilder setCode(String code) {
this.code = code;
return this;
}
public ApiErrorDetailBuilder setMessage(String message) {
this.message = message;
return this;
}
public ApiErrorDetailBuilder setExceptionName(String exceptionName) {
this.exceptionName = exceptionName;
return this;
}
public ApiErrorDetail build() {
return new ApiErrorDetail(this);
}
}
public static ApiErrorDetail.ApiErrorDetailBuilder Builder(){
return new ApiErrorDetail.ApiErrorDetailBuilder();
}
}
최근 댓글