REST 에러응답프로그램
프로그램용도 | 구현할 Java인터페이스 | 적용할 설정화면 |
---|---|---|
사용자호출프로그램 | RestErrorResponseCreate | API정보관리>API정보 |
수신시스템의 장애 등으로 요청전문을 수신시스템으로 전송하지 못하면, 해당 거래는 무응답(Timeout) 처리된다.
만일 송신시스템에 에러응답전문을 전송해야 하는 경우, 에러응답프로그램을 통해 에러전문을 생성하여 송신시스템에 응답을 전송할 수 있다.
개발방법
에러응답프로그램 입출력 모델
RestErrorResponseCreate API는 입력과 출력을 각각 RestErrorResponseCreateIn
과 RestErrorResponseCreateOut
으로 사용한다.
입력과 출력의 모델은 API 프로젝트의 bxi.api.model
에 정의되어 있으며, 각각의 항목에 대한 설명은 아래와 같다.
RestErrorResponseCreateIn
설정항목 | 필드명 | 설명 |
---|---|---|
기관코드 | instCd | 전문을 전송한 기관코드이거나 또는 대내시스템 전문을 대외기관에 전송할 기관코드를 의미한다. FEP에서만 사용되는 항목이다. |
업무코드 | bizCd | 기관이나 대내시스템의 업무코드를 의미한다. |
도메인ID | domainId | 도메인ID를 의미한다. |
APIID | apiId | API ID를 의미한다. |
HTTP메소드 | httpMethod | HTTP 메소드(GET, POST..)를 의미한다. |
URL | url | 전송할 URL을 의미한다. |
HTTP해더 | httpHeader | HTTP해더값을 Map형태로 저장한다. |
개별부 데이터 | body | 각 거래별 개별전문을 의미한다. |
요청응답구분 | rqstRspsDscd | 요청응답구분코드를 의미한다. |
HTTP응답코드 | httpRspsCd | HTTP 응답코드를 의미한다. |
응답코드 | rspsCd | 응답코드를 의미한다. |
타임아웃여부 | timeout | 타임아웃 에러 여부를 의미한다. 타임아웃 에러이면 true이다. |
동기여부 | sync | 동기 여부를 의미한다. 동기면 true이다. |
전송에러 | sendError | 전문 전송 에러 여부를 의미한다. 전문 전송 에러이면 true이다. |
예외 | exception | 거래가 실패한 예외를 의미한다. |
RestErrorResponseCreateOut
설정항목 | 필드명 | 설명 |
---|---|---|
HTTP해더 | httpHeader | HTTP해더값을 Map형태로 저장한다. |
개별부 데이터 | body | 에러 응답할 개별부 데이터를 의미한다. 응답할 개별부 데이터가 없으면 null로 응답한다. |
HTTP상태코드 | statusCode | HTTP 응답코드를 의미한다. 세팅된 값으로 응답코드가 표시된다. |
에러 여부 | error | 에러 응답 전문 생성 중에 에러가 발생했는지 여부를 의미한다. true로 응답하면 에러 응답 전문을 전송하지 않는다. |
아래 예제는 송신시스템에서 수신한 전문을 처리하는 과정에서 에러가 발생하여 REST 에러 응답을 하는 예제이다.
1. 출력 객체 생성 및 초기화
@Override
public RestErrorResponseCreateOut errorProcess(RestErrorResponseCreateIn in) {
RestErrorResponseCreateOut out = new RestErrorResponseCreateOut();
}
에러 응답 전문을 생성하여 전달할 출력 객체를 생성한다.
2. 에러코드 저장
// Generate error response message
Map<String, Object> body = new LinkedHashMap<String, Object>();
body.put("rgstrnNbr", "aaa");
body.put("rgstrnNbrDscd", "b");
body.put("dataUsePspr", "cc");
body.put("inqryAgrmntYn", "N");
body.put("entrprsName", "뱅크웨어");
body.put("custName", "홍길동");
body.put("ocptnCd", "11");
body.put("cardRank", in.getRspsCd());
out.setStatusCode(500); // 500에러를 던지겠다는 예시임
out.setHttpHeader(in.getHttpHeader());
out.setBody(ConversionUtil.objectToJson(body));
out.setError(false);
입력으로 전달한 HTTP해더를 출력의 HTTP해더에 저장하고 에러시 보여줄 개별부데이터를 만들어서 출력의 body
에 저장한다.
해당 로직이 정상적으로 수행되었다면, 출력의 error
에 false를 저장한다. (에러응답 생성중에 에러가 발생할시에는 true가 저장되도록 로직을 구성한다.)
전체 예제
package bxi.extension.customizing.api;
import java.util.LinkedHashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import bxi.api.RestErrorResponseCreate;
import bxi.api.model.RestErrorResponseCreateIn;
import bxi.api.model.RestErrorResponseCreateOut;
import bxi.parser.conversion.ConversionUtil;
@Component
public class RestErrorResponseProgram implements RestErrorResponseCreate {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public RestErrorResponseCreateOut errorProcess(RestErrorResponseCreateIn in) {
logger.debug("User Request Program Start. in : [{}]", in);
RestErrorResponseCreateOut out = new RestErrorResponseCreateOut();
Map<String, Object> body = new LinkedHashMap<String, Object>();
body.put("rgstrnNbr", "aaa");
body.put("rgstrnNbrDscd", "b");
body.put("dataUsePspr", "cc");
body.put("inqryAgrmntYn", "N");
body.put("entrprsName", "뱅크웨어");
body.put("custName", "홍길동");
body.put("ocptnCd", "11");
body.put("cardRank", in.getRspsCd());
out.setStatusCode(500);
out.setHttpHeader(in.getHttpHeader());
out.setBody(ConversionUtil.objectToJson(body));
out.setError(false);
return out;
}
}