아마란스 결재 수정

This commit is contained in:
2026-02-24 16:42:53 +09:00
parent 7cc1a789ce
commit 72a001f533
2 changed files with 92 additions and 23 deletions

View File

@@ -1,6 +1,8 @@
package com.pms.controller;
import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -10,6 +12,8 @@ import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ibatis.session.SqlSession;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -393,7 +397,8 @@ public class ApprovalController {
@ResponseBody
@RequestMapping(value="/approval/amaranthApprovalCallback.do", produces="application/json; charset=UTF-8")
public String amaranthApprovalCallback(HttpServletRequest request, @RequestParam Map<String, Object> paramMap)throws Exception{
return approvalService.handleAmaranthApprovalCallback(paramMap);
Map<String, Object> mergedParam = mergeRequestParams(request, paramMap);
return approvalService.handleAmaranthApprovalCallback(mergedParam);
}
/**
@@ -403,7 +408,53 @@ public class ApprovalController {
@ResponseBody
@RequestMapping(value="/approval/amaranthApprovalContents.do", produces="application/json; charset=UTF-8")
public String amaranthApprovalContents(HttpServletRequest request, @RequestParam Map<String, Object> paramMap)throws Exception{
return approvalService.getAmaranthApprovalContents(paramMap);
Map<String, Object> mergedParam = mergeRequestParams(request, paramMap);
return approvalService.getAmaranthApprovalContents(mergedParam);
}
/**
* Amaranth에서 form-data 또는 JSON body로 파라미터를 전달할 수 있으므로
* @RequestParam(form/query)과 JSON body를 모두 처리
*/
private Map<String, Object> mergeRequestParams(HttpServletRequest request, Map<String, Object> paramMap){
Map<String, Object> merged = new HashMap<>(paramMap);
// @RequestParam에 approkey가 이미 있으면 추가 파싱 불필요
if(merged.containsKey("approkey") || merged.containsKey("approKey")){
System.out.println("[Amaranth API] @RequestParam에서 파라미터 수신: " + merged.keySet());
return merged;
}
// JSON body 파싱 시도
try {
String contentType = request.getContentType();
System.out.println("[Amaranth API] ContentType: " + contentType + ", @RequestParam 키: " + merged.keySet());
BufferedReader reader = request.getReader();
StringBuilder sb = new StringBuilder();
String line;
while((line = reader.readLine()) != null){
sb.append(line);
}
String body = sb.toString().trim();
if(!body.isEmpty()){
System.out.println("[Amaranth API] Request Body: " + body);
JSONParser parser = new JSONParser();
Object parsed = parser.parse(body);
if(parsed instanceof JSONObject){
JSONObject json = (JSONObject) parsed;
for(Object key : json.keySet()){
merged.put(String.valueOf(key), json.get(key));
}
System.out.println("[Amaranth API] JSON body에서 파라미터 추출: " + merged.keySet());
}
}
} catch(Exception e){
System.err.println("[Amaranth API] JSON body 파싱 실패 (무시): " + e.getMessage());
}
return merged;
}
}