From 3fcc11211396c751ad2d4a31dfd254ef76cbc3d4 Mon Sep 17 00:00:00 2001 From: curry772 Date: Wed, 17 Jun 2026 09:27:13 +0900 Subject: [PATCH] =?UTF-8?q?kjb=20=ED=95=84=ED=84=B0=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../filter/custom/JsonToSetStatusFilter.java | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/main/java/com/eactive/eai/adapter/http/dynamic/filter/custom/JsonToSetStatusFilter.java diff --git a/src/main/java/com/eactive/eai/adapter/http/dynamic/filter/custom/JsonToSetStatusFilter.java b/src/main/java/com/eactive/eai/adapter/http/dynamic/filter/custom/JsonToSetStatusFilter.java new file mode 100644 index 0000000..678af70 --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/dynamic/filter/custom/JsonToSetStatusFilter.java @@ -0,0 +1,71 @@ +package com.eactive.eai.adapter.http.dynamic.filter.custom; + +import java.io.UnsupportedEncodingException; +import java.util.Properties; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; +import org.apache.commons.lang3.StringUtils; + +import com.eactive.eai.adapter.AdapterManager; +import com.eactive.eai.adapter.http.dynamic.filter.HttpAdapterFilter; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class JsonToSetStatusFilter implements HttpAdapterFilter { + private ObjectMapper mapper = new ObjectMapper(); + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Object message, Properties prop, + HttpServletRequest request, HttpServletResponse response) throws Exception { + JsonNode rootNode = parseJson(adptGrpName, message); + + int httpStatus = 200; + + if (rootNode.has("apiRsltCd") && !rootNode.get("apiRsltCd").asText().isEmpty()) { + try { + String statusParam = rootNode.get("apiRsltCd").asText(); + httpStatus = Integer.parseInt(statusParam); + } catch (NumberFormatException e) { + httpStatus = 400; // 잘못된 입력일 경우 400 Bad Request 반환 + } + // HTTP 상태 코드 설정 + response.setStatus(httpStatus); + } + return message; + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Object resultMessage, Properties prop, + HttpServletRequest request, HttpServletResponse response) throws Exception { + JsonNode rootNode = parseJson(adptGrpName, resultMessage); + int httpStatus = 200; + + if (rootNode.has("apiRsltCd") && !rootNode.get("apiRsltCd").asText().isEmpty()) { + try { + String statusParam = rootNode.get("apiRsltCd").asText(); + httpStatus = Integer.parseInt(statusParam); + } catch (NumberFormatException e) { + httpStatus = 400; // 잘못된 입력일 경우 400 Bad Request 반환 + } + // HTTP 상태 코드 설정 + response.setStatus(httpStatus); + } + return resultMessage; + } + + public JsonNode parseJson(String adptGrpName, Object message) throws UnsupportedEncodingException, JsonMappingException, JsonProcessingException { + String charset = StringUtils.defaultIfBlank(AdapterManager.getInstance().getAdapterGroupVO(adptGrpName).getMessageEncode(), "UTF-8"); + String orgMessageString; + if(message instanceof byte[]) { + orgMessageString = new String((byte[])message, charset); + } else { + orgMessageString = (String) message; + } + + return mapper.readTree(orgMessageString); + } +}