진행 중인 프로젝트에서 request Parameter를 처리하는부분을
Spring HandlerMethodArgumentResolver interface를 커스텀해서 사용 중인데,
-
처음에는 팝업창이 잘 열리는데,
-
두번째 다시 팝업창을 열면 오류가 발생했다.
부모창 새로고침 이후에
- 처음 팝업은 다시 잘되는데 두번째는 아래와 같은 오류가 발생.
로그 확인
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String] with root cause
java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String...
request parameter를 공통으로 받아서 처리하는 부분에서 동일ID로 여러개가 넘어올경우
- String 배열로 받게끔 구현해놓았는데,
- String Casting Exception이 발생한 것으로 해당 부분이 의심이 가기 시작.
- 공통화시킨 common.js를 확인해 보니 addParam Function에서 append만 되고,
- 다시 요청시 동일한 파라미터가 append되어, String 배열로 받아지는 부분을 확인
- 넘어온 파라미터를 확인 하고, 배열로 넘어온 것을 확인 후
- 파라미터를 생성 후 넘겨주는 jquery 공통화 부분을 확인
//파라미터가 담긴 Map클래스에 담긴 파라미터 출력
Set set = commandMap.entrySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()){
log.info(iterator.next().toString());
}
//첫번째 팝업 호출시 로그
2019-11-22 14:49:10.526 INFO 18684 --- [nio-8090-exec-3]
k.co.jpos.bg.controller.OrderController : DT=2019-11-22
k.co.jpos.bg.controller.OrderController : STYLECD=
//두번째 팝업 호출시 로그
2019-11-22 14:47:22.462 INFO 18684 --- [nio-8090-exec-8] k.co.jpos.bg.controller.OrderController : DT=[Ljava.lang.String;@1ef35103
k.co.jpos.bg.controller.OrderController : STYLECD=[Ljava.lang.String;@142292a0
문제 발생부분
this.addParam = function addParam(key, value) {
$("#" + this.formId).append($("<input type='hidden' name='" + key + "' id='" + key + "' value='" + value + "' >"));
};
- 단일 파라미터가 아닌 동적생성에 따른 멀티파라미터가 넘어오면서 발생된 문제
- 파라미터를 지우는 removeParam function을 추가하는 방법을 고민하다
- append시점에 해당 key값을 id로 가지는 필드를 제거 이후
- 다시 append하는 방식으로 변경
수정/해결
this.addParam = function addParam(key, value) {
$("#" + key).remove();
$("#" + this.formId).append($("<input type='hidden' name='" + key + "' id='" + key + "' value='" + value + "' >"));
};