HTTP 示例

本節通過幾個示例總結了 Spring Integration 對 HTTP 的支援。

多部分 HTTP 請求 — RestTemplate(客戶端)和 Http 入站閘道器(伺服器)

此示例展示了使用 Spring 的 RestTemplate 傳送多部分 HTTP 請求並使用 Spring Integration HTTP 入站介面卡接收它有多麼簡單。我們建立一個 MultiValueMap 並用多部分資料填充它。RestTemplate 透過將其轉換為 MultipartHttpServletRequest 來處理其餘部分(無雙關語)。這個特定的客戶端傳送一個多部分 HTTP 請求,其中包含公司名稱和影像檔案(公司徽標)。以下列表顯示了該示例

RestTemplate template = new RestTemplate();
String uri = "https://:8080/multipart-http/inboundAdapter.htm";
Resource s2logo =
   new ClassPathResource("org/springframework/samples/multipart/spring09_logo.png");
MultiValueMap map = new LinkedMultiValueMap();
map.add("company", "SpringSource");
map.add("company-logo", s2logo);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(new MediaType("multipart", "form-data"));
HttpEntity request = new HttpEntity(map, headers);
ResponseEntity<?> httpResponse = template.exchange(uri, HttpMethod.POST, request, null);

這就是客戶端所需的一切。

在伺服器端,我們有以下配置

<int-http:inbound-channel-adapter id="httpInboundAdapter"
    channel="receiveChannel"
    path="/inboundAdapter.htm"
    supported-methods="GET, POST"/>

<int:channel id="receiveChannel"/>

<int:service-activator input-channel="receiveChannel">
    <bean class="org.springframework.integration.samples.multipart.MultipartReceiver"/>
</int:service-activator>

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

'httpInboundAdapter' 接收請求並將其轉換為一個有效負載為 LinkedMultiValueMapMessage。然後,我們在 'multipartReceiver' 服務啟用器中解析它,如以下示例所示

public void receive(LinkedMultiValueMap<String, Object> multipartRequest){
    System.out.println("### Successfully received multipart request ###");
    for (String elementName : multipartRequest.keySet()) {
        if (elementName.equals("company")){
            System.out.println("\t" + elementName + " - " +
                ((String[]) multipartRequest.getFirst("company"))[0]);
        }
        else if (elementName.equals("company-logo")){
            System.out.println("\t" + elementName + " - as UploadedMultipartFile: " +
                ((UploadedMultipartFile) multipartRequest
                    .getFirst("company-logo")).getOriginalFilename());
        }
    }
}

您應該看到以下輸出

### Successfully received multipart request ###
   company - SpringSource
   company-logo - as UploadedMultipartFile: spring09_logo.png
© . This site is unofficial and not affiliated with VMware.