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 | 
