1

나는 http-inbound-gateway를 가지고 있으며 인바운드 채널을 페이로드로 채우기 위해 요청 매개 변수를 검색하려고합니다. http-inbound-gateway는 스프링 표현식을 지원하므로 #requestParams를 사용하여 요청 매개 변수를 검색 할 수 있습니다. #requestParams는 Map을 반환하는 request.getParameters ('key')와 같지만 String을 반환하는 request.getParameter ('key')를 호출 할 것으로 예상됩니다. 현재이 문제를 해결하려면 새 문자열 (#requestParams [ 'key'])을 사용해야합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?스프링 통합으로 요청 매개 변수를 검색하는 방법 spring-el에 의해 http-inbound-gateway?

<int-http:inbound-gateway path="/mypath" 
    supported-methods="GET" payload-expression="new String(#requestParams['key']?:'')" 
    request-channel="inboundChannel" reply-channel="outboundChannel" 
    error-channel="errorChannel" 
    message-converters="stringHttpMessageConverterUsingUtf8">  
</int-http:inbound-gateway> 

답변

1

나는 그렇게 #requestParameters가 LinkedMultiValueMap 개체입니다

@SuppressWarnings({ "rawtypes", "unchecked" }) 
private Message<?> actualDoHandleRequest(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws IOException { 
//omitted codes 
LinkedMultiValueMap<String, String> requestParams = this.convertParameterMap(servletRequest.getParameterMap()); 
     evaluationContext.setVariable("requestParams", requestParams); 
//omitted codes  
} 

org.springframework.integration.http.inbound.HttpRequestHandlingEndpointSupport

에서 소스 코드를 찾을 수 있습니다. 원하는 String 요청 매개 변수를 얻으려면

#requestParams.get('your key')?:''//null safe 

을 사용할 수 있습니다.

1

requestParams 변수는 LinkedMultiValueMap 유형의 객체입니다. LinkedMultiValueMap#get 메서드는 목록을 반환합니다. 따라서 코드 #requestParams.get('your key')?:''//null safe은 문자열 목록을 반환합니다. 대부분의 경우에는 정상적으로 작동하지만 예를 들어 (#requestParams.get('your key')?:'').equals('value')이라는 비교는 실패합니다. 첫 번째 문자열 매개 변수를 가져 오는 전체 null의 안전 코드는 다음과 같습니다 LinkedMultiValueMapLinkedList에 여러 값을 저장하는 것을

(#requestParams.get('your key')?:{''})[0] 

참고. 하나의 요청 매개 변수 값만 필요하면 LinkedMultiValueMap#toSingleValueMap 메소드를 사용할 수 있습니다.

+0

감사합니다. 좋은 제안입니다. – Hippoom