본문으로 건너뛰기

REST 에러응답프로그램

프로그램용도구현할 Java인터페이스적용할 설정화면
사용자호출프로그램RestErrorResponseCreateAPI정보관리>API정보

수신시스템의 장애 등으로 요청전문을 수신시스템으로 전송하지 못하면, 해당 거래는 무응답(Timeout) 처리된다.

만일 송신시스템에 에러응답전문을 전송해야 하는 경우, 에러응답프로그램을 통해 에러전문을 생성하여 송신시스템에 응답을 전송할 수 있다.

개발방법

에러응답프로그램 입출력 모델

RestErrorResponseCreate API는 입력과 출력을 각각 RestErrorResponseCreateInRestErrorResponseCreateOut으로 사용한다. 입력과 출력의 모델은 API 프로젝트의 bxi.api.model에 정의되어 있으며, 각각의 항목에 대한 설명은 아래와 같다.

RestErrorResponseCreateIn

설정항목필드명설명
기관코드instCd전문을 전송한 기관코드이거나 또는 대내시스템 전문을 대외기관에 전송할 기관코드를 의미한다. FEP에서만 사용되는 항목이다.
업무코드bizCd기관이나 대내시스템의 업무코드를 의미한다.
도메인IDdomainId도메인ID를 의미한다.
APIIDapiIdAPI ID를 의미한다.
HTTP메소드httpMethodHTTP 메소드(GET, POST..)를 의미한다.
URLurl전송할 URL을 의미한다.
HTTP해더httpHeaderHTTP해더값을 Map형태로 저장한다.
개별부 데이터body각 거래별 개별전문을 의미한다.
요청응답구분rqstRspsDscd요청응답구분코드를 의미한다.
HTTP응답코드httpRspsCdHTTP 응답코드를 의미한다.
응답코드rspsCd응답코드를 의미한다.
타임아웃여부timeout타임아웃 에러 여부를 의미한다. 타임아웃 에러이면 true이다.
동기여부sync동기 여부를 의미한다. 동기면 true이다.
전송에러sendError전문 전송 에러 여부를 의미한다. 전문 전송 에러이면 true이다.
예외exception거래가 실패한 예외를 의미한다.

RestErrorResponseCreateOut

설정항목필드명설명
HTTP해더httpHeaderHTTP해더값을 Map형태로 저장한다.
개별부 데이터body에러 응답할 개별부 데이터를 의미한다. 응답할 개별부 데이터가 없으면 null로 응답한다.
HTTP상태코드statusCodeHTTP 응답코드를 의미한다. 세팅된 값으로 응답코드가 표시된다.
에러 여부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;
}

}