2017-05-05 2 views
3

스프링 통합은 입력 채널에서 JSON 메시지를 변환하고 해당 키를 제공하여 JSON 메시지에서 값을 추출하려고합니다. 그것의 SpelEvaluationException 던지고있다.json 경로 표현식을 사용한 Spring 통합 변환 오류

봄 통합 구성

<int:object-to-json-transformer input-channel="inputEventChannel" output-channel="jsonMapChannel"/> 

<int:transformer input-channel="jsonMapChannel" output-channel="transformChannel" 
    expression="#jsonPath(payload, '$.[0].EVENTNAME')"/> 

오류 메시지

에 의해 발생 : org.springframework.messaging.MessageHandlingException : 식 평가가 실패했습니다. #jsonPath (페이로드를, '$를 [ 0] .EVENTNAME '); 중첩 된 예외는 org.springframework.expression.spel.SpelEvaluationException입니다 : EL1022E : 'class org.springframework.expression.TypedValue'유형의 객체에 매핑 된 'jsonPath'함수가 호출 될 수 없습니다. failedMessage = GenericMessage [payload = [{ " EVENTTIME ":"계정 ","EVENTID ":"15590 ","APPLICATIONID ": 1,"CREATEDTIMESTAMP ": 1493929367000,"TRANSACTIONID ":"100.2.33 "}, 헤더 = {json__ContentTypeId __ = 클래스 org.springframework.util.LinkedCaseInsensitiveMap, ID = acbc053a-b466-fbb9-8d3d-f60c78371b3e, json__TypeId __ = 클래스 인 java.util.ArrayList, ContentType을 = 응용 프로그램/JSON, 타임 스탬프 = 1493933245720]를

나는 알고있다} 여기서 뭐가 잘못 됐어? 나는 이것도 시도했다. 같은 오류 동작.

#jsonPath(payload, '$.EVENTNAME') 

감사합니다.

답변

2

EL1022EjsonPath 기능이 기능으로 등록되지 않았 음을 의미합니다.

JsonPath jar이 클래스 경로에 없음을 의미합니다.

DEBUG 로깅

logger.debug("The '#jsonPath' SpEL function cannot be registered: " + 
     "there is no jayway json-path.jar on the classpath."); 
+0

감사합니다 당신이 제안 내가 JSON-경로에 대한 받는다는 항목을 추가 한 후, 그것은 일 @GaryRussell ...이 로그를 표시해야합니다. – VeeAar

+0

Spring Integration에서 JSON 메시지를 처리하는 데 대해 하나 더 질문이 있습니다. 일부 키 - 값 쌍을 수정하거나 기존 JSON 메시지에 더 많은 키 - 값 쌍을 추가해야하는 경우이를 달성하는 방법을 알고 있습니까? 감사. – VeeAar

+0

당신은 정말로 새로운 질문을해야합니다. 여기에있는 관리자들은 확장 된 주석이나 코멘트에 관련없는 질문을 좋아하지 않습니다. 대상 클래스가'LinkedHashMap' 인 json-to-object-transformer를 사용할 수 있습니다 - 새로운 속성을 추가하고 다시 json으로 변환하십시오. 즉, 원래 개체가 'LinkedCaseInsensitiveMap'의 목록 이었으므로 JSON으로 변환하기 전에지도를 조작하지 않는 것이 좋습니다. –