728x90
반응형
아래와 같이 REST API 오류 응답시 클라이언트가 이해할 수 있는 충분한 정보를 제공한다.
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{
"error_code":"INVALID_CLIENT_ID",
"error_message":"The requested client identifier is invalid.",
"error_data":{
"client_id":"x9LHxnqkFp9vcEfUlsCtBG"
}
}
ExceptionData 설계
package com.jsonobject.example.api.domain;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.HashMap;
import java.util.Map;
@NoArgsConstructor
@Data
public class ApiExceptionData {
private Map<String, Object> data;
public ApiExceptionData add(String key, Object value) {
if (this.data == null) {
this.data = new HashMap<String, Object>();
}
this.data.put(key, value);
return this;
}
}
Exception 설계
package com.jsonobject.example.api.exception;
import com.jsonobject.example.api.domain.ApiExceptionData;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
@NoArgsConstructor
@Getter
@Setter
@ToString
@Slf4j
@JsonPropertyOrder(value = {"error_code", "error_message", "error_data"})
public class ApiException extends Exception {
@JsonProperty("error_code")
private String code;
@JsonProperty("error_message")
private String message;
@JsonProperty("error_data")
@JsonInclude(JsonInclude.Include.NON_NULL)
private Map data;
public ApiException(String code, String message) {
this.code = code;
this.message = message;
}
public ApiException(String code, String message, ApiExceptionData data) {
this.code = code;
this.message = message;
this.data = data.getData();
}
}
ExceptionHandler 설계
이제 마지막으로 ExceptionHandler를 작성하여 설계한 예외 발생시 후처리 로직을 설계해야 한다. 본 블로그의 아래 글을 참고한다.
예외 발생
- 이제 시스템에서는 아래와 같이 예외를 발생시키면 된다.
throw new ApiException(
"INVALID_CLIENT_ID",
"The requested client identifier is invalid.",
new ApiExceptionData().add("client_id", client_id)
);
출처: http://jsonobject.tistory.com/388?category=641992 [지단로보트의 블로그]
728x90
반응형
'SPRINGBOOT > 소스코드' 카테고리의 다른 글
Spring Boot, ExceptionHandler, 전역 예외 처리 로직 작성하기 (0) | 2017.12.06 |
---|---|
[spring] 서블릿 에러 핸들링 - 4 (@ControllerAdvice와 404에러 핸들링) (0) | 2017.12.06 |
[spring] 서블릿 에러 핸들링 - 3 (@ControllerAdvice를 사용한 전역 익셉션 처리) (0) | 2017.12.06 |
[spring] 서블릿 에러 핸들링 - 2 (CustomException과 @ResponseStatus) (0) | 2017.12.06 |
[spring] 서블릿 에러 핸들링 - 1 (@ExceptionHandler, @ResponseStatus) (0) | 2017.12.06 |
Spring Boot, Jackson, @JsonView로 멀티 뷰 구성하기 (0) | 2017.10.26 |
Spring Boot, REST API 예외 응답 로직 작성하기 (0) | 2017.10.26 |
Spring Boot, ExceptionHandler, 전역 예외 처리 로직 작성하기 (0) | 2017.10.26 |