2014-10-12 85 views
0

我們試圖將來自HTTP入站請求的請求參數設置爲標題。我們已經成功地將請求值設置爲標題,但是它沒有按照我們想要的方式設置。在Spring集成中將HTTP請求標題設置爲LinkedList

請求標頭映射值作爲java.util.LinkedList設置爲消息標頭,而不是String,它是預期的請求參數類型。

下面是配置

<int-http:inbound-gateway id="inboundApplicationDataRequestGateway" 
     supported-methods="GET" 
     request-channel="applicationDataRequest" 
     reply-channel="applicationDataResponse" 
     mapped-response-headers="HTTP_REQUEST_HEADERS" 
     path="/services/application/that/data" 
     reply-timeout="50000"> 

      <int-http:header name="dataVersion" expression="#requestParams['data_version']"/> 
     </int-http:inbound-gateway> 

<int:service-activator id="applicationDataServiceActivator" 
        input-channel="applicationDataRequest" 
        output-channel="applicationDataResponse" 
        ref="dataService" 
        method="getData" 
        requires-reply="false" 
        send-timeout="60000"/> 

以下是示例服務方法

public void getData(Message<?> inMessage){ 
     MessageHeaders headers = inMessage.getHeaders(); 
     logger.info("DATA VERSION : " + (String)headers.get("dataVersion")); 
    } 

以下是堆棧跟蹤

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.messaging.MessageHandlingException: java.lang.ClassCastException: java.util.LinkedList cannot be cast to java.lang.String 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690) 

我們怎麼能有dataVersion設爲一個字符串,而不是一個鏈表?

此外,我們需要做的POST請求以下的其他HTTP入站網關的方法以及

任何幫助表示讚賞。

問候, MilindaD

回答

0

這是因爲servletRequest.getParameterMap()回報Map<String, String[]>和Spring集成其轉換爲MultiValueMap<String, String>。而當你問到它get有些價值,它真的返回LinkedList<String>

因此,要獲得從List只有單一值(在這裏你是真的相信,世界上只有一個項目),你應該這樣寫:

<int-http:header name="dataVersion" expression="#requestParams.getFirst('data_version')"/>