본문으로 건너뛰기

요청응답구분프로그램

프로그램용도구현할 Java인터페이스적용할 설정화면
사용자호출프로그램RequestAndResponseDistinction기본설정관리>기관별업무정보, 기본설정관리>시스템별업무정보

공통부 전문의 요청/응답을 구분하는 방법은 매우 다양하다.

기관의 경우 전문종별/업무코드의 조합으로 판단되기도 하고, 전문의 특정필드 또는 송수신 커넥션을 구분하여 처리하기도 한다. 따라서 요청응답구분 프로그램은 각 기관/시스템별로 프로그램을 개발하여 적용해야 하는 필수 프로그램이다.

개발방법​

Map방식으로 변환한 후 호출하는 API​

해당 예제는 Map에서 종별코드 msgClssCd 필드의 값을 조회하여 S면 요청이고 아니면 응답으로 판단한다.

@Override
public RequestResponseKindEnum distinction(BxiMessage bxiMessage, Map<String, Object> header) {
// 1) Field lookup in Map
String msgType = (String) header.get("msgClssCd");
logger.debug("msgType : {}", msgType);

// 2) If the third field of the field is 0, it is request specific.
return ("S".equals(msgType)) ? RequestResponseKindEnum.REQUEST
: RequestResponseKindEnum.RESPONSE;
}

☑ 입력​

  • bxiMessage : 전문 처리에 필요한 정보가 저장되어 있는 항목
  • header : 헤더부를 Unmarshal한 Map 형식의 헤더부 데이터

☑ 출력​

  • RequestResponseKindEnum 값으로 요청은 REQUEST, 응답은 RESPONSE 반환

수신받은 전문 데이터로 호출하는 API​

해당 예제는 unmarshal되지 않은 전체 메시지로 요청응답을 구분한다. 대외에서 수신한 전문에서 종별코드 위치의 값을 조회하고, S면 요청, 아니면 응답으로 판단한다.

@Override
public RequestResponseKindEnum distinction(BxiMessage bxiMessage, String message) {
// 1) Separate data from field positions in the text
String msgType = message.substring(18, 22);
logger.debug("msgType : {}", msgType);

// 2) If the third field of the field is 0, it is request specific.
return ("0".equals(msgType)) ? RequestResponseKindEnum.REQUEST
: RequestResponseKindEnum.RESPONSE;
}

☑ 입력​

  • bxiMessage : 해당 전문 처리에 필요한 정보가 저장되어 있는 항목
  • message : 수신한 전문 데이터

☑ 출력​

  • RequestResponseKindEnum 값으로 요청은 REQUEST, 응답은 RESPONSE 반환

전체 예제​

package bxi.extension.sample;

import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import bxi.api.RequestAndResponseDistinction;
import bxi.common.enums.RequestResponseKindEnum;
import bxi.common.model.BxiMessage;

@Component
public class RequestAndResponseDistinctionImpl implements RequestAndResponseDistinction {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Override
public RequestResponseKindEnum distinction(BxiMessage bxiMessage, Map<String, Object> header) {
String msgType = (String) header.get("msgClssCd");
logger.debug("msgType : {}", msgType);

return getRequestResponseType(msgType);
}

@Override
public RequestResponseKindEnum distinction(BxiMessage bxiMessage, String message) {
String msgType = message.substring(18, 22);
logger.debug("msgType : {}", msgType);

return getRequestResponseType(msgType);
}

private RequestResponseKindEnum getRequestResponseType(String msgType) {
if ("S".equals(msgType)) {
return RequestResponseKindEnum.REQUEST;
}

return RequestResponseKindEnum.RESPONSE;
}
}